我的代码中有一些奇怪的不一致错误,很难重现。它显示但如果我再次运行相同的序列,它会消失。如果我尝试调试它,它就会消失。
无论如何,我想知道以下是否可能是罪魁祸首 假设我有以下代码
var myBoolean; // undefined
if( !myBoolean ) {
doX();
} else {
doY();
}
问题是,在上面的代码中,它会运行doX()还是doY()?
当我测试它时,它似乎运行doX(),但我知道有一种更正确的方法来检查未定义。
if( typeof myBoolean == 'undefined' || !myBoolean ) { ...
所以我的问题是,检查myBoolean的不正确方法是否会导致我的代码中的不确定性?只是我必须在很多地方进行代码更改,我只想在做任何事情之前知道这是否是问题。
答案 0 :(得分:4)
当!myBoolean
为myBoolean
时,undefined
表达式始终为真。但是,当它0
,""
,false
,NaN
或null
时,它也为真
是否可以取决于程序中的情况。您编写的示例代码显然毫无意义;由于myBoolean
语句中的undefined
肯定是if
,因此可以完全删除if
。在实际情况中,您可能知道变量或对象属性将是undefined
或对象引用。
许多人将防御性编码作为一种练习,因此这样的程序员可能会包含更明确的测试。 大多数当时,值null
和undefined
在典型的编码情况下具有相同的本质含义,所以如果这是那么可以安全地写
if (myBoolean == null)
==
只有在myBoolean
为undefined
或null
时才会生效,而在任何其他情况下都不会。换句话说,
if (myBoolean == null)
实际上与
相同if (myBoolean === undefined || myBoolean === null)
您当然可以使用您喜欢的任何一种方式:)