物件遍歷及其他方法
遍歷 for in 會遍歷出物件以及該物件原型鏈上的屬性名,for in 可以遍歷到myObject的原型方法method,如果不想遍歷原型方法和屬性的話,可以在迴圈內部判斷一下,hasOwnPropery方法可以判斷某屬性是否是該物件的例項屬性, for(key in obj),key是obj裡的屬性名,如果是陣列得到陣列的索引值
for of 獲取屬性值,
Object.keys()
是 ES5 新增的一個物件方法,該方法返回物件自身屬性名組成的陣列,它會自動過濾掉原型鏈上的屬性,
object.values獲取物件自身屬性值的一個數組,object.entries獲取一個數組,數組裡面小陣列,小陣列第一個值是屬性名,第二個值是屬性值,
for in 迴圈和 Object.keys()
方法都不會返回物件的不可列舉屬性,(物件裡面裝物件,這個物件的屬性名就是不可列舉的屬性)
// 建立一個物件並指定其原型,bar 為原型上的屬性
// baz 為物件自身的屬性並且不可列舉
const obj = Object.create({
bar: 'bar'
}, {
baz: {
value: 'baz',
enumerable: false
}
})
obj.foo = 'foo'
// 不包括不可列舉的 baz 屬性
Object.keys(obj).forEach((key) => {
console.log(obj[key]) // foo
})
// 包括不可列舉的 baz 屬性
Object.getOwnPropertyNames(obj).forEach((key) => {
console.log(obj[key]) // baz, foo
})
Object.getOwnPropertyNames()
也是 ES5 新增的一個物件方法,該方法返回物件自身屬性名組成的陣列,包括不可列舉的屬性
Reflect.ownKeys()
方法是 ES2015 新增的靜態方法,該方法返回物件自身所有屬性名組成的陣列,包括不可列舉的屬性和 Symbol 屬性