这个if语句不应该检测0; 只有null或空字符串

Ham*_*ter 23 javascript null if-statement

使用JavaScript,我怎么不检测0,否则检测空或空字符串?

Bol*_*ock 26

从你的问题标题:

if( val === null || val == "" )
Run Code Online (Sandbox Code Playgroud)

我只能看到你=在尝试val与空字符串进行严格相等比较时忘记了:

if( val === null || val === "" )
Run Code Online (Sandbox Code Playgroud)

使用Firebug进行测试:

>>> 0 === null || 0 == ""
true

>>> 0 === null || 0 === ""
false
Run Code Online (Sandbox Code Playgroud)

编辑:请参阅CMS的评论,而不是解释.

  • 实际上,`0 ==""`不会*强制*为'false == false`,最后比较的值将是:`0 == 0`.发生这种情况是因为如果Equals运算符的一个操作数是Number值,另一个也将转换为Number,并且只有一个空的或只有空格的字符串,键入 - 转换为'0`,例如:`+""`或`号( "")`.另一个例子:`0 == {valueOf:function(){return 0;}}`求值为`true`,因为该对象定义了一个自己的`valueOf`方法,该方法由`ToNumber`操作在内部使用,而我们知道它不会*强制*为'false`,因为一个对象**永远不会***falsy*. (3认同)

Que*_*tin 26

如果要检测除零以外的所有假值:

if (!foo && foo !== 0) 
Run Code Online (Sandbox Code Playgroud)

因此,这将检测null,空字符串,false,undefined,等.

  • 你几乎在那里,不妨澄清你的意思'等'. (3认同)