2015-04-16 18 views
0

我創建了一個performance test來將數組值查找與對象鍵查找進行比較,並發現當執行鍵查找時,鍵不存在於對象中的速度遠遠低於鍵存在。它甚至比在數組中搜索該值更慢。當鍵不存在時緩慢的對象鍵查找

This answer指出,在Chrome上,對象是使用類實現的,但我無法弄清楚爲什麼這會使查找速度變慢。

任何想法?

回答

2

如果找不到密鑰,則會遍歷整個原型鏈,尋找該密鑰。

ECMA-262 §4.2.1 Objects:

每個對象都通過構造函數創建具有的隱式引用(稱爲對象的原型)其構造的「prototype」屬性的值。此外,原型可能有一個對其原型的非空隱式引用,等等;這被稱爲原型鏈。當對對象中的某個屬性進行引用時,該引用就是該原型鏈中包含該名稱屬性的第一個對象中該名稱的屬性。換句話說,首先直接提到的對象是檢查這樣的屬性;如果該對象包含指定的屬性,那就是引用引用的屬性;如果該對象不包含指定的屬性,則接下來檢查該對象的原型;等等。

figure 1 – object/prototype relationships

+0

偉大的答案!這是記錄在某處嗎? – Tzach

+1

關於JS中的原型鏈查找,大概有[bajillion articles online](https://www.google.com/search?q=javascript%20prototype%20chain)。拿你的選擇。 [ECMA-262規範](http://www.ecma-international.org/ecma-262/5.1/#sec-4.2.1),[Mozilla's](https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain)可能是最權威的。 –