2011-12-01 94 views
3

我想检查此:是否有一个很好的简单方法来检查Javascript中的变量是否有值?

if (typeof myVar != "undefined" && myVar != null) 
    ... 

换句话说,我要检查,如果一个变量具有定义的值(包括0或空字符串),但不undefined或null,其解读为无价值。

我每次都必须做两部分检查还是有方便的快捷方式?

+0

参见:http://stackoverflow.com/questions/6031372/undefined-and-null –

+0

为自己写一个函数并回到解决真正的问题:) – Kos

回答

1

如果你知道myVar的的的情况下,你应该能够做到这一点:

if (this.myVar != null) { 
    ... 
} 
+0

啊哈!当然是的,因为'undefined == null'。多么方便。 :)如你所说,var必须存在,但在我的情况下,这是真的。 – devios1

+0

无论是否声明'myVar',该方法都应该可以工作。如果你知道你正在谈论一个全局变量,那么你也可以说'window.myVar!= null'。 – nnnnnn

4

如果你想允许0""作为有效值和你想覆盖变量的情况下,甚至可能不会delcared,但不考虑空有效的值,那么你必须明确检查undefinednull这样的:

if (typeof myVar !== 'undefined' && myVar !== null) 
    ... 

很多价值观是falsey(他们并不满足if (myVar),所以你真的有意识地决定你要测试哪些针对所有这些都是falsey:

undefined 
false 
0 
"" 
null 
NaN 

如果你想允许一些,但不是其他人,那么你必须做一个比上面显示的if (myVar)更具体的测试,以隔离你关心的值。

下面是对falsey值的一个很好的写法:http://www.sitepoint.com/javascript-truthy-falsy/

如果知道变量已经宣布和你只是想看看它是否已与非NULL的初始化,您可以使用此:

if (myVar != undefined) 
    ... 

只使用!=,而不是!==允许这通过类型转换测试undefined和null。虽然我不推荐这样做,因为如果你想辨别falsey值,最好不要让JS引擎做任何类型的转换,所以你可以控制它的功能,而不必记住所有的类型转换平等规则。我这个固守待更明确:

if (typeof myVar !== 'undefined' && myVar !== null) 
    ... 

如果你想知道是否有任何非falsey值,当然你可以做到这一点(但不会允许0""为有效值:

if (myVar) 
    ... 
+2

当'myVar'未初始化时(通过设置一个值或使用'var myVar'),这会引发一个引用错误。 – Kenaniah

+1

此外,'myVar!= undefined'将产生与'myVar!= undefined && myVar!= null'相同的结果,因为'null == undefined'属实。 –

+0

myvar == undefined如果我的var未定义或为null,则返回true,就像myvar == null一样。 – kennebec

2

2-部件方法如果不检查的typeof首先,你会得到一个引用错误最终

0

如果MYVAR可能是不确定的,称它没有。检查类型将引发错误。

如果它被定义为null(如myvar = element.lastChild没有孩子的元素),如果你只是使用typeof,你会错过捕获它。

0

那么,null是一个定义的值...所以如果你想确保变量不包含null,并且没有定义,你必须执行两个检查。

+0

'null == undefined'返回'true'。 'null === undefined'返回'false'。 – Kenaniah

相关问题