对undefined var进行条件检查是做什么的?
问题描述:
我的代码中有一些奇怪的不一致的错误,很难重现。它出现了,但如果我再次运行相同的序列,它就会消失。如果我尝试调试它,它会消失。对undefined var进行条件检查是做什么的?
不管怎么说,我想知道,如果下面可能是罪魁祸首 假设我有以下代码
var myBoolean; // undefined
if(!myBoolean) {
doX();
} else {
doY();
}
的问题是,在上面的代码,它运行DOX()或DOY()?
当我测试它,它似乎运行doX(),但我知道有一个更正确的方式来检查未定义。
if(typeof myBoolean == 'undefined' || !myBoolean) { ...
所以我的问题是,可能检查的方式不当myBoolean在我的代码会导致非决定论?只是我不得不在很多地方改变这些代码,我只想在做任何事之前知道这是否是问题。
答
表达!myBoolean
当myBoolean
是undefined
将总是是真实的。但是,它将也为0
,""
,false
,NaN
或null
时为true。
这是否正常取决于您的程序中的情况。你写的示例代码显然是毫无意义的;由于myBoolean
肯定会在undefined
那if
声明中,if
可以完全消除。在实际情况中,您可能知道变量或对象属性将为undefined
或对象引用。
许多人在防守中作为练习代码,所以这样的程序员可能会包含更明确的测试。 大部分时间,这是真的,价值null
和undefined
在典型的编码情况相同的基本含义,因此,如果是这样的话,那么它的安全写
if (myBoolean == null)
的==
比较将只有当真正的myBoolean
是undefined
或null
,而不是在任何其他情况下。换句话说,
if (myBoolean == null)
实际上是相同的
if (myBoolean === undefined || myBoolean === null)
你可以用你喜欢哪个当然:)
所以标题将更好地沿着东西*我如何测试只有未定义?* –
你甚至不需要检查变量的类型以知道它是否为undefined,只需检查它的值:if(myBoolean === undefined){...' – LostMyGlasses
这是显然是过分简化了我的代码。在实际的代码中,myBoolean可以是未定义的,true或false的。 – kane