如下所示,Javascript中的"0"为false:

>>> "0" == false
true

>>> false == "0"
true

那么下面为什么打印“哈”呢?

>>> if ("0") console.log("ha")
ha

当前回答

在JS中,“==”符号不检查变量的类型。因此,“0”= 0 = false(在JS中为0 = false),在这种情况下将返回true,但如果使用“===”,结果将为false。

当你使用"if"时,在以下情况下它将是"false":

[0, false, '', null, undefined, NaN] // null = undefined, 0 = false

So

if("0") = if( ("0" !== 0) && ("0" !== false) && ("0" !== "") && ("0" !== null) && ("0" !== undefined) && ("0" !== NaN) )
        = if(true && true && true && true && true && true)
        = if(true)

其他回答

显示问题的表格:

和= =

这个故事的寓意使用===

表生成credit: https://github.com/dorey/JavaScript-Equality-Table

0周围的引号使它成为一个字符串,它的值为true。

删除引号,它应该工作。

if (0) console.log("ha") 

在PHP中,字符串“0”是假的(false-when-used-in-boolean-context)。在JavaScript中,所有非空字符串都是真值。

技巧是==针对布尔值并不在布尔上下文中求值,它转换为数字,在字符串的情况下是通过解析为十进制来完成的。所以你得到0而不是truthiness boolean true。

这是一个非常糟糕的语言设计,这也是我们尽量不使用不幸的==操作符的原因之一。请使用===代替。

// I usually do this:

x = "0" ;

if (!!+x) console.log('I am true');
else      console.log('I am false');

// Essentially converting string to integer and then boolean.
if (x) 

使用JavaScript内部的toBoolean (http://es5.github.com/#x9.2)强制x

x == false

使用内部tonnumber强制(http://es5.github.com/#x9.3)或对象的toPrimitive强制(http://es5.github.com/#x9.1)

详情见http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/