for in,Object.keys和Object.getOwnPropertyNames的区别
2018-04-09 09:03
726 查看
varparent=Object.create(Object.prototype,{ a:{ value:1, writable:true, enumerable:true, configurable:true } });
parent继承自Object.prototype,有一个可枚举的属性a。下面我们在创建一个继承自parent的对象child。
varchild=Object.create(parent,{ b:{ value:2, writable:true, enumerable:true, configurable:true }, c:{ value:3, writable:true, enumerable:false, configurable:true } });
child有两个属性b和c,其中b为可枚举属性,c为不可枚举属性。
下面我们将用四种方法遍历child对象,来比较四种方法的不同。如下的代码代表程序的输出。
forin
forin是es3中就存在,最早用来遍历对象(集合)的方法。for(varkeyinchild){ console.log(key); } //>b //>a
从输出可以看出,forin会输出自身以及原型链上可枚举的属性。
注意:不同的浏览器对forin属性输出的顺序可能不同。
如果仅想输出自身的属性可以借助
for(varkeyinchild){ if(child.hasOwnProperty(key)){ console.log(key); } } //>b
上面的代码,仅输出了child自己的可枚举属性b,而没有输出原型parent中的属性。
Object.keys
console.log(Object.keys(child)); //>["b"]
可以看出Object.keys的效果和forin+hasOwnProperty的效果是一样的。
Object.getOwnPropertyNames
console.log(Object.getOwnPropertyNames(child)); //>["b","c"] 总结 而遍历对象有5种方法:
(1)for...in
for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。
相关文章推荐
- 小tips:JS之for in、Object.keys()和Object.getOwnPropertyNames()的区别
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
- JS:for...in...,Objects.keys()和Object.getOwnPropertyNames的区别
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
- (for..in)、Object.keys()和Object.getOwnPropertyNames(),for...of
- Javascript研究: 遍历对象的方式Object.getOwnPropertyNames vs Object.keys vs for ...in
- for in 、Object.keys()以及Object.getOwnPropertyNames的区别
- 详解forin,Object.keys和Object.getOwnPropertyNames的区别
- 属性遍历:in操作符/Object.keys()/ Object.getOwnPropertyNames()
- for in与Object.keys,Object.getOwnPropertyNames的区别
- JavaScript中Object.keys、Object.getOwnPropertyNames区别
- Object.getOwnPropertyNames和Object.keys
- js object.create()、Object.defineproperty()、,Object.keys()...for..in,for..each
- hasOwnProperty,Object.keys(),propertyIsEnumerable,for-in(loop)
- ES6 Symbol及对象遍历方法for in,Object,keys,JSON.stringify,getOwnPropertyNames,Reflect.ownKeys
- Difference between Object.keys() and Object.getOwnPropertyNames()
- Object.getOwnPropertyNames()
- Object.getOwnPropertyNames和Object.keys区别
- javascript中的Object.defineProperty()与getOwnPropertyNames ()方法
- Object.getOwnPropertyNames()