Javascript 分析`if(x)`VS`if(x==未定义)` 函数f(){ var t=document.getElementById(“t”); var g=t.asdfg; var a=新日期().getTime(); 对于(var x=0;x

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);

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);
            //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')