2011-06-17 33 views
5
<script> 
    function f(){ 
     var t=document.getElementById("t"); 
     var g=t.asdfg; 
     var a=new Date().getTime(); 
     for(var x=0;x<100000000;++x){ 
      if(g===undefined); 
      //if(g); 
     } 
     var b=new Date().getTime(); 
     alert(b-a); 
    } 
</script> 
<body onload="f();"> 
    <input id="t"/> 
</body> 
在Firefox if(g)

慢於if(g===undefined)。我想知道有沒有人知道有什麼好的解釋爲什麼是這種情況?仿形`如果(x)的``VS如果(X ===未定義)`

在Chrome if(g)if(g===undefined)更快。我想知道有沒有人知道有什麼好的解釋爲什麼是這種情況?

我並不是說我們應該用一個比其他..我只是感興趣的理論

可以說,不同的瀏覽器有不同的實現,但任何理論在任何瀏覽器將是值得的答案

+0

對於這樣的基準,您可能需要使用http://jsperf.com/(我不是下屬,只是一個風扇)。 – Giacomo 2011-06-17 09:42:04

回答

6

在javascript中沒有關鍵字undefined,它不起作用,就像null那樣。

當您使用

if(g===undefined) 

undefined會被解析爲一個標識符。因此,解釋者必須檢查全局(窗口)範圍內undefined變量的存在。這種查找需要一些時間。

恕我直言,更正確的方式來檢查undefinedness是(雖然不一定更快)

if(typeof(g) === 'undefined') 

在另一方面,表達if(g)是最有可能的隱式轉換爲布爾值,實現其中的當然也需要一些時間。

所以我的猜測是,這兩種不同的操作是不能在Firefox和Chrome引擎一樣快。

+0

與一些分析我相信'typeof'運算符也不是很快。只是我的2c – Pacerier 2011-06-17 17:21:03

+0

同意。用typeof性能的主要問題可能是字符串比較 – 2011-06-17 17:59:56

+0

呃其實我的觀點是'typeof'運營商是不是非常快=緩慢。字符串比較依賴於字符串長度。因爲「undefined」是一個相當短的字符串,所以'typeof'運算符在這裏肯定有更多的開銷。 IE/FF/Chrome(排名前三的瀏覽器)證明我是對的,但Opera/Safari證明我是對的。是的,這與問題無關。 – Pacerier 2011-06-17 19:51:05

相關問題