将变量与undefined进行比较是否不安全?
if(foo == undefined)
VS
if(foo == 'undefined')
第一个例子是否足够?或者它应该是
if('undefined' in window){
//compare against undefined
} else {
//compare against 'undefined'
}
因为undefined
对象上存在window
?它会存在于所有浏览器中吗?或者我应该简单地与== 'undefined'
进行比较?我在SO上发现了一些类似的问题,但没有关于窗口对象上未定义属性存在的答案。
答案 0 :(得分:1)
答案 1 :(得分:1)
我认为你在foo == undefined
和typeof foo == "undefined"
之间混淆了。
两者都会产生相同的结果,除非变量undefined
已设置为当前范围内的其他内容。在这种情况下,foo == undefined
将与typeof foo == "undefined"
进行比较,其中var undefined = 4;
var reallyUndefined;
reallyUndefined == undefined; // false
typeof reallyUndefined == undefined; // true
仍将正确解析。
undefined
这是否是typeof foo === "undefined"
将被设置为其他东西的现实世界场景是值得商榷的,我会质疑库/代码的有效性......因此,它被认为是总是使用foo == undefined
的好习惯。
我也对使用foo === undefined
对==
持谨慎态度(注意三等号,不使用类型 - 强制,与==
相比)。
使用null == undefined; // true
,您会冒null === undefined; // false
之类的风险,其中 - ===
。这是始终使用typeof foo === "undefined";
。
tl; dr :{{1}}
答案 2 :(得分:1)
if (foo === undefined)
安全
答案 3 :(得分:1)
有几种方法可以做到这一点,但我发现最容易的是:
if(foo === undefined){
//do stuff
}
答案 4 :(得分:1)
如果你完全控制了所有代码,并且你知道你不必担心有人在跟undefined
混淆,那么可以安全地与它进行比较。
alert(window.foo === undefined);
另一方面,如果你想变得更偏执,你可以做一个不受外界词影响的类型检查
alert(typeof window.foo == 'undefined')
第三个选项是拥有自己的本地未定义变量。
function testme(a, undefined) {
alert(a === undefined); // Will be false.
}
testme(10);