为什么javascript中的for-in速度慢?

前端之家收集整理的这篇文章主要介绍了为什么javascript中的for-in速度慢?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在几个地方读过,for-in循环比在数组上循环慢……虽然我知道在sizeof(type)块中向前移动几乎没有什么比在场景后面迭代对象的键所发生的事情更容易了,我仍然很好奇,究竟是什么原因,它是如此缓慢……

是否必须执行反向哈希函数获取密钥,而该过程是什么样的慢?

解决方法

在任何特定引擎的情况下,对此的真正答案可能取决于该引擎的实现. (差异的大小,如果有的话.)

但是,有不变量.例如,考虑:

var obj = {a: "alpha",b: "beta"};
var name;
for (name in obj) {
    console.log(obj[name]);
}

var arr = ["alpha","beta"];
var index;
for (index = 0; index < arr.length; ++index) {
    console.log(arr[index]);
}

在obj的情况下,引擎必须使用一种机制来跟踪你已经迭代过的属性和你没有过去的属性,以及过滤掉不可枚举的属性.例如,幕后有一些迭代器对象(以及定义规范的方式,可能是一个临时数组).

在arr的情况下,它没有;您正在以非常简单,有效的方式处理代码.

每个循环的块的内容是相同的:对象的属性查找. (在后一种情况下,理论上也有数字到字符串的转换.)

所以我希望唯一的非实现特定的答案是:额外的开销.

猜你在找的JavaScript相关文章