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

Posted 易函123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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五种遍历对象属性的方式

以上是关于ES6五种遍历对象属性的方式的主要内容,如果未能解决你的问题,请参考以下文章

es6遍历对象的几种方式

ES6对象的新增方法

ES6之6种遍历对象属性的方法

ES6之6种遍历对象属性的方法

ES6对象属性名简洁表示法和表达式对象新方法属性的遍历

ES6之6种遍历对象属性的方法