对undefined var的条件检查有什么作用?

时间:2015-09-05 16:14:52

标签: javascript

我的代码中有一些奇怪的不一致错误,很难重现。它显示但如果我再次运行相同的序列,它会消失。如果我尝试调试它,它就会消失。

无论如何,我想知道以下是否可能是罪魁祸首 假设我有以下代码

var myBoolean; // undefined
if( !myBoolean ) {
  doX();
} else {
  doY();
}

问题是,在上面的代码中,它会运行doX()还是doY()?

当我测试它时,它似乎运行doX(),但我知道有一种更正确的方法来检查未定义。

if( typeof myBoolean == 'undefined' || !myBoolean ) { ...

所以我的问题是,检查myBoolean的不正确方法是否会导致我的代码中的不确定性?只是我必须在很多地方进行代码更改,我只想在做任何事情之前知道这是否是问题。

1 个答案:

答案 0 :(得分:4)

!myBooleanmyBoolean时,undefined表达式始终为真。但是,当它0""falseNaNnull时,它为真

是否可以取决于程序中的情况。您编写的示例代码显然毫无意义;由于myBoolean语句中的undefined肯定是if,因此可以完全删除if。在实际情况中,您可能知道变量或对象属性将是undefined或对象引用。

许多人将防御性编码作为一种练习,因此这样的程序员可能会包含更明确的测试。 大多数当时,值nullundefined在典型的编码情况下具有相同的本质含义,所以如果这是那么可以安全地写

if (myBoolean == null)

==只有在myBooleanundefinednull时才会生效,而在任何其他情况下都不会。换句话说,

if (myBoolean == null)

实际上与

相同
if (myBoolean === undefined || myBoolean === null)

您当然可以使用您喜欢的任何一种方式:)