比较undefined

时间:2012-09-22 18:31:18

标签: javascript

将变量与undefined进行比较是否不安全?

if(foo == undefined)

VS

if(foo == 'undefined')

第一个例子是否足够?或者它应该是

if('undefined' in window){
     //compare against undefined
} else {
    //compare against 'undefined'
}

因为undefined对象上存在window?它会存在于所有浏览器中吗?或者我应该简单地与== 'undefined'进行比较?我在SO上发现了一些类似的问题,但没有关于窗口对象上未定义属性存在的答案。

5 个答案:

答案 0 :(得分:1)

我建议你改用typeof

if (typeof foo == "undefined") {
    // ...
}

请注意,typeof会返回字符串,因此您应始终将其与字符串值进行比较。

答案 1 :(得分:1)

我认为你在foo == undefinedtypeof 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);