// hasOwnProperty approach
for (key in obj) {
if (obj.hasOwnProperty(key)) {
value = obj[key];
}
}
// Object.keys approach
keys = Object.keys(obj);
for (i = 0, l = keys.length; i < l; i++) {
value = obj[keys[i]];
}
根据jsperf,Object.keys方法快50%+ http://jsperf.com/object-keys-vs-hasownproperty/45
为什么会这样?
答案 0 :(得分:50)
Object.keys
查找所有拥有的,可枚举的属性(哦,数组很快)。for in
还会查找继承的可枚举属性,而不仅仅是自己的属性for in
+ hasOwnProperty
另外测试所有已查找的属性,看它们是否属于自己的属性。即使没有继承的可枚举属性,仍然需要做更多工作。
答案 1 :(得分:3)
该主题中的大多数测试都显示hasownproperty
比Object.keys()
更快。然而,对于那些测试,循环的特性量很小(<20个特性)。
只要对象属性的数量很大(没有确切的数字,使用&gt; 100个键的测试显示Object.keys()
作为明显的赢家),Object.keys()
就会胜过它。
见https://jsperf.com/object-keys-vs-hasownproperty/55。您可以转到页面底部查看测试的所有修订。