zoukankan      html  css  js  c++  java
  • ES6五种遍历对象属性的方式

    ES6五种遍历对象属性的方式

    function allObj(){
      this.name = '张三'; // 自有属性
      this.age = '12'; // 自有属性
      this.invisible = {
        enumerable: false,
        value: 'hello'
      },
      this.invisible = {
        enumerable: false,
        value: 'hello'
      }
    }
    allObj.prototype.disEnum = {
      enumerable: false,
      value: 'disEnum'
    }
    allObj.prototype.Enum = {
      enumerable: true,
      value: 'Enum'
    }
    let obj = new allObj
    Object.assign(obj, {
      a: '1',
      b: '2',
      c: '3',
      [Symbol('c')]: 'c',
    })
    Object.assign(obj,
      Object.defineProperty({}, 'visible',{
        enumerable: true,
        value: 'word'
      })
    )
    console.log(obj); // allObj {a: "1",age: "12",b: "2",c: "3",invisible: {enumerable: false,value: 'hello'},name: "张三",visible: "word",Symbol(c): "c",__proto__:Enum: {enumerable: true, value: "Enum"},disEnum: {enumerable: false, value: "disEnum"}}
    // for...in循环遍历对象自身的和继承的属性(不含Symbol属性)
    for(let key in obj){
      console.log(key);
      // name
      // age
      // invisible
      // a
      // b
      // c
      // invisible
      // visible
      // disEnum
      // Enum
    }
    
    // Object.keys()返回一个数组,包括对象自身(不含继承的)的所有属性(不含Symbol属性)
    console.log(Object.keys(obj)); // ["name", "age", "invisible", "a", "b", "c", "visible"]
    
    // Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性 )
    console.log(Object.getOwnPropertyNames(obj)); // ["name", "age", "invisible", "a", "b", "c", "visible"]
    
    // Object.getOwnPropertySymbols() 返回一个数组,包含所有对象自身的所有Symbol属性
    console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(c)]
    
    // Reflect.ownKeys()返回一个数组,包含对象自身的所有属性,不管属性名是Symbol还是字符串,也不管是否可枚举
    console.log(Reflect.ownKeys(obj)); // ["name", "age", "invisible", "a", "b", "c", "visible", Symbol(c)]
    

    解决for..in遍历对象时,原型链上的所有属性都将被访问

    function allObj(){
      this.name = '张三'; // 自有属性
      this.age = '12'; // 自有属性
      this.invisible = {
        enumerable: false,
        value: 'hello'
      },
      this.invisible = {
        enumerable: false,
        value: 'hello'
      }
    }
    allObj.prototype.disEnum = {
      enumerable: false,
      value: 'disEnum'
    }
    allObj.prototype.Enum = {
      enumerable: true,
      value: 'Enum'
    }
    let obj = new allObj
    Object.assign(obj, {
      a: '1',
      b: '2',
      c: '3',
      [Symbol('c')]: 'c',
    })
    Object.assign(obj,
      Object.defineProperty({}, 'visible',{
        enumerable: true,
        value: 'word'
      })
    )
    console.log(obj);
    for(let key in obj){
      if(obj.hasOwnProperty(key)===true){
        console.log(key);
        // name
        // age
        // invisible
        // a
        // b
        // c
        // visible
      }
    }
    

    ES6五种遍历对象属性的方式

  • 相关阅读:
    mysql之数据库数据导入EXCEL表格
    Docker 删除所有容器
    Docker之Docker文件,一篇就够了
    Docker 安装与基本操作指令
    shell实例:九九乘法表,各种图形,幸运大抽奖
    Firewalld防火墙(包含firewall-config图形工具和firewall-cmd命令行工具如何使用)
    shell脚本--循环语句、(概念及实例)
    华为ENSP------access、trunk、hybrid配置连载2
    2020-11-16T11:13:27.991012Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 2020-11-16T11:13:27.991065Z 0 [ERROR] Aborting
    华为ESPN-------MSTP连载(4)
  • 原文地址:https://www.cnblogs.com/yihan123/p/14649583.html
Copyright © 2011-2022 走看看