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五種遍歷對象屬性的方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章