之间是否有任何差异
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
我们应该使用哪一个?
答案 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()
}
}