<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)
慢。我想知道有没有人知道为什么会这样?
在 Chrome 中 if(g)
比 if(g===undefined)
更快。我想知道有没有人知道为什么会这样?
我不是在争论我们应该使用一个而不是另一个。我只是对理论
感兴趣可以说不同的浏览器有不同的实现,但任何浏览器上的理论都值得回答
最佳答案
javascript 中没有关键字undefined
,它不像null
那样工作。
当你使用
if(g===undefined)
undefined
将被解析为标识符。因此,解释器必须检查全局(窗口)范围内是否存在 undefined
变量。此查找需要一些时间。
恕我直言,检查未定义的更正确方法是(虽然不一定更快)
if(typeof(g) === 'undefined')
另一方面,表达式 if(g)
最有可能实现为 bool 值的隐式转换,这当然也需要一些时间。
所以我猜测这两种不同的操作在 Firefox 和 Chrome 引擎中的速度并不相同。
关于javascript - 分析 `if(x)` VS `if(x===undefined)`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383520/