分析`if(x)`VS`if(x === undefined)`

Nam*_*ame 5 javascript profiling

<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>
Run Code Online (Sandbox Code Playgroud)

在Firefox if(g)中慢于if(g===undefined).我想知道有没有人知道为什么会这样呢?

Chrome if(g)中的速度比if(g===undefined).我想知道有没有人知道为什么会这样呢?

我不是在争论我们应该使用一个而不是另一个......我只是对这个理论感兴趣

可以说不同的浏览器有不同的实现,但任何浏览器上的任何理论都值得回答

Jon*_*øgh 6

undefined在javascript中没有关键字,它不像那样工作null.

当你使用

if(g===undefined)
Run Code Online (Sandbox Code Playgroud)

undefined将被解析为标识符.因此,解释器必须检查undefined全局(窗口)范围中变量的存在性.这种查找需要一些时间.

恕我直言,检查不确定性的更正确的方法是(虽然不一定更快)

if(typeof(g) === 'undefined')
Run Code Online (Sandbox Code Playgroud)

另一方面,表达式if(g)很可能实现为对布尔值的隐式强制转换,这当然也需要一些时间.

所以我的猜测是这两种不同的操作在Firefox和Chrome引擎中并不是同样快.