我想查看一下:
if ( typeof myVar != "undefined" && myVar != null )
...
换句话说,我想检查一个变量是否有一个定义的值(包括0或一个空字符串),但不是undefined或null,我将其解释为无值。
我每次都必须进行两部分检查,还是有方便的快捷方式?
答案 0 :(得分:4)
如果您想允许0
和""
作为有效值,并且您希望覆盖变量的情况甚至可能没有被删除,但是不要将null视为有效值,那么您必须像这样专门检查undefined
和null
:
if (typeof myVar !== 'undefined' && myVar !== null)
...
许多值都是假的(它们不满足if (myVar)
所以你真的必须有条不紊地决定你要测试哪些。所有这些都是假的:
undefined
false
0
""
null
NaN
如果你想允许某些人,而不是其他人,那么你必须做一个比我上面所示的if (myVar)
更具体的测试来隔离你关心的值。
这是关于假值的一个很好的写法:http://www.sitepoint.com/javascript-truthy-falsy/。
如果您知道该变量已被声明,并且您只想查看它是否已使用null以外的其他内容进行初始化,则可以使用此:
if (myVar != undefined)
...
仅使用!=
代替!==
,可以通过类型转换测试未定义和null。虽然,我不推荐这个,因为如果你试图辨别假值,最好不要让JS引擎进行任何类型的转换,这样你就可以准确控制它的作用,而不必记住所有的类型转换平等规则。我坚持这一点更明确:
if (typeof myVar !== 'undefined' && myVar !== null)
...
如果您想知道它是否有任何非假名值,您当然可以这样做(但这不允许0
或""
作为有效值:
if (myVar)
...
答案 1 :(得分:2)
两部分方法。如果您不首先检查typeof
,则最终会出现引用错误。
答案 2 :(得分:1)
如果你知道 myVar 的上下文,你应该可以这样做:
if (this.myVar != null) {
...
}
答案 3 :(得分:0)
如果myvar可能未定义,则在没有typeof检查的情况下调用myvar将引发错误。
如果它被定义为null(对于没有子元素的元素,就像myvar = element.lastChild),如果你只使用typeof,你就会错过它。
答案 4 :(得分:0)
嗯,null是一个定义的值...所以如果你想确保变量不包含null,并且未定义,你必须同时进行这两项检查。