2013-04-22 18 views
0

我已经注意到,如果你有一个声明,如下:在javascript中是否将空字符串视为falsy?

var test = "" || null 

test将评估为null但如果我们这样做了以下内容:

var test = "test" || null 

test将评估“测试“,对于任何对象来说,同样适用于替换字符串,所以JavaScript会将空字符串视为虚假值还是空值,以及为什么?不是一个空字符串仍然是一个对象,所以不应该处理相同?

我已经在FireFox,Chrome,IE7/8/9和Node中测试过了。

+2

http://www.sitepoint.com/javascript-truthy-falsy/ – Rikonator 2013-04-22 09:54:28

回答

3

JavaScript是否将空字符串视为falsy或null值,如果是这样,为什么?

是的,因为the spec says so (§9.2)

是不是一个空字符串仍然对象

号的原始字符串值没有对象,只有new String("")将是(和将truthy)

+0

啊现在更有意义了,谢谢!它似乎对我来说是一个奇怪的决定,使空字符串麻烦,但我想我必须习惯于将字符串视为基本类型,而不是对象。 – AgentRegEdit 2013-04-22 11:31:39

0

字符串不是一个对象,它是一个像数字或布尔型的原语。

空字符串NaN,+0,-0,false,undefined和null是在直接布尔转换中计算为false的唯一值。

0

字符串ISN” JS中的一个对象。其他“虚假”值为:0,NaN,nullundefined

0

您必须注意的错误值的一个危险问题是在检查某个属性的存在时。

假设您想测试新属性的可用性;当这个属性其实可以有0或“”的值,你不能简单地用

if (!someObject.someProperty) 
    /* incorrectly assume that someProperty is unavailable */ 
In this case, you must check for it being really present or not: 

if (typeof someObject.someProperty == "undefined") 
    /* now it's really not available */ 

SEE HERE

0

是检查其可用性空字符串是falsy,但是new String("")不是。

还请注意,这是很可能的,

if (x) { ... } 

验证,但

if (x == false) { ... } 

过验证(发生这种情况,例如有一个空数组[]new String(""))。

相关问题