2011-06-17 61 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

相关问题