Javascript 分析`if(x)`VS`if(x==未定义)` 函数f(){ var t=document.getElementById(“t”); var g=t.asdfg; var a=新日期().getTime(); 对于(var x=0;x
javascript中没有未定义的关键字Javascript 分析`if(x)`VS`if(x==未定义)` 函数f(){ var t=document.getElementById(“t”); var g=t.asdfg; var a=新日期().getTime(); 对于(var x=0;x,javascript,profiling,Javascript,Profiling,javascript中没有未定义的关键字,它不像null那样工作 当你使用 <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);
,它不像null
那样工作
当你使用
<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>
undefined
将被解析为标识符。因此,解释器必须检查全局(窗口)范围中是否存在undefined
变量。此查找需要一些时间
依我看,检查不确定性更正确的方法是(尽管不一定更快)
另一方面,表达式if(g)
很可能实现为对布尔值的隐式转换,这当然也需要一些时间
因此,我的猜测是,这两种不同的操作在Firefox和Chrome引擎中的速度并不相同。对于这样的基准测试,您可能需要使用(我不是附属机构,只是一个粉丝)。通过一些分析,我相信
typeof
操作符也不是很快。我的同事同意。typeof性能的主要问题可能是字符串比较。事实上,我的观点是typeof
操作符不是很快=很慢。字符串比较很大程度上取决于字符串长度。因为“未定义”是一个相当短的字符串,typeof
操作符的开销肯定更大。IE/FF/Chrome(前三大浏览器)证明我是对的,但公平地说,Opera/Safari证明我是错的。是的,这与问题无关。
if(g===undefined)
if(typeof(g) === 'undefined')