[英]javascript object property lookup
由於javascript中的對象是關聯映射(其他編程語言中的HashMap)執行下一個代碼
for (var prop in object) {
if (prop === someConcreteProperty) {
// some decision
break;
}
}
慢一點,然后虛擬屬性查找像
if (typeof object.someConcreteProperty != 'undefined') {
// some decision
}
編輯:
我正在考慮類似代碼的性能:
for ( var prop in obj)
if (obj[prop] === someAnonymousMethod) {
// I need that property name for my need
return obj.prop();
}
它將是屬性查找時間的兩倍嗎
obj.prop()
或者更多?
謝謝。
我猜對於第一個意思是:
if ('prop' in obj) {
// ...
}
然后,您可以討論速度差異和不同的行為。
家庭作業:
var obj = { prop: undefined }; // a bit philosophical...
可以憑經驗進行測試:
<script language="javascript">
alert("Initialising test object...");
var obj = new Object();
for (var i=0; i<1000000; i++) obj["prop"+i] = i;
alert("Initialised. Doing Test.");
var d1 = (new Date()).getTime();
needle = obj["prop"+(i-1)]; // last object
for (var prop in obj) {
if (obj === needle) {
// some decision
break;
}
}
var ms1 = ((new Date()).getTime()) - d1;
alert("Method 1 took "+ms1+"ms.")
var d2 = (new Date()).getTime();
if (typeof obj["prop"+(i-1)] != 'undefined') {
// some decision
}
var ms2 = (new Date()).getTime() - d2;
alert("Method 2 took "+ms2+"ms.")
</script>
方法1比方法2花費的時間更長。這不足為奇,因為執行方法2所需的所有計算都包含在方法1中,而且還要多得多。
當您了解JavaScript中屬性查找的工作原理后,這個問題的答案就變得顯而易見。 在最壞的情況下,JavaScript對象中的屬性被實現為哈希表中的元素。
在這種情況下,屬性查找平均在恆定時間內執行。 值得注意的是,在非常罕見的最壞情況下,哈希表搜索時間可以是線性的。
如果遍歷屬性列表,則會將性能降低為線性時間,大致與對象中的屬性數量成比例。
所以,是的方法1總是更快, 多得更快,如果對象有很多屬性。
附帶說明:許多現代JavaScript引擎(例如Google的V8)可能會為您優化代碼以提供更好的性能。 實際上,我相信V8中的對象是作為真實類實現的。 在這種情況下,與傳統的哈希表查找不同,可以確保內存查找為恆定時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.