当密钥不存在时,慢速对象密钥查找

时间:2015-04-16 15:13:41

标签: javascript performance

我创建了一个performance test来比较数组值搜索到对象键查找,并发现在进行键查找时,当键不存在于对象中时比键存在时慢得多。它比在数组中搜索此值更慢。

This answer表示在Chrome上,对象是使用类实现的,但我无法弄清楚为什么这会使查找变慢。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当找不到密钥时,将遍历整个原型链,寻找该密钥。

来自ECMA-262 §4.2.1 Objects:

  

构造函数创建的每个对象都有一个隐式引用(称为对象的 prototype )到其构造函数的“prototype”属性的值。此外,原型可能具有对其原型的非零隐式引用,依此类推;这被称为原型链。当引用对象中的属性时,该引用是原型链中包含该名称属性的第一个对象中该名称的属性。换句话说,首先检查直接提到的对象的这种属性;如果该对象包含命名属性,那么该引用引用的属性;如果该对象不包含命名属性,则接下来检查该对象的原型;等等。

     

figure 1 – object/prototype relationships