men*_*oic 14 javascript performance
// 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]];
}
Run Code Online (Sandbox Code Playgroud)
根据jsperf,Object.keys方法快50%以上http://jsperf.com/object-keys-vs-hasownproperty/45
为什么是这样?
Ber*_*rgi 54
Object.keys查找所有自己的,可枚举的属性(哦,数组很快).for in另外查找继承的可枚举属性,而不仅仅是自己的属性for in+ hasOwnProperty另外测试所有查找属性是否属于自己的属性.即使没有继承的可枚举属性,仍然需要做更多的工作.
该线程中的大多数测试显示hasownproperty比Object.keys(). 但是,对于这些测试,要循环的属性数量很少(<20 个属性)。
只要对象属性的数量很大(没有确切的数字,超过 100 个键的测试显示Object.keys()为明显的赢家),就会Object.keys()击败它。
请参阅https://jsperf.com/object-keys-vs-hasownproperty/55。您可以转到页面底部查看测试的所有修订。