遍历 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 属性
原文:https://www.cnblogs.com/hmfzy-blogs/p/14924978.html