将值与'undefined'进行比较的最佳方法是什么?

时间:2011-08-18 13:23:22

标签: javascript

之间是否有任何差异
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")

我们应该使用哪一个?

6 个答案:

答案 0 :(得分:11)

具有讽刺意味的是,undefined可以在JavaScript中重新定义,而不是那些心智正常的人会这样做,例如:

undefined = "LOL!";

此时对undefined的所有未来平等检查都会产生意外结果!

至于=====(相等运算符)之间的差异,==将尝试将值从一种类型强制转换为另一种类型,用英语表示0 == "0"将评估即使类型不同(Number vs String),开发人员也倾向于避免这种类型的松散相等,因为它可能导致代码中的调试错误。

因此最安全:

"undefined" === typeof a

检查undefinedness时:)

答案 1 :(得分:1)

我个人喜欢使用

[undefined, null].indexOf(variable) > -1

也检查空值。

答案 2 :(得分:0)

var a;
(a == undefined) //true
(a === undefined) //true
((typeof a) == "undefined") //true
((typeof a) === "undefined") //true

BUT:

var a;
(a == "undefined") //false
(a === "undefined") //false
((typeof a) == undefined) //false
((typeof a) === undefined) //false

答案 3 :(得分:0)

你应该使用上面提到的:

"undefined" === typeof a

但是如果你要检查很多变量,你的代码在某些时候会变丑,所以你可以考虑使用Java的方法:

try { vvv=xxx; zzz=yyyy; mmm=nnn; ooo=ppp; } 
catch(err){ alert(err.message); }

显然,alert()不应该在生产版本中使用,但在调试版本中它非常有用。 它甚至可以在IE 6等旧浏览器中运行:

https://msdn.microsoft.com/library/4yahc5d8%28v=vs.94%29.aspx

答案 4 :(得分:-1)

如果a未定义,则

a == undefined

实际上会抛出错误。使用

(typeof a) === "undefined"

相反。

答案 5 :(得分:-2)

如果您声明var a,那么它将不再是未定义的 - 它将是null。我通常使用typeof a == undefined - 它工作正常。这在这种情况下特别有用:

function myfunc(myvar)
{
    if(typeof myvar == "undefined")
    {
        //the function was called without an argument, simply as myfunc()
    }
}