如下所示,Javascript中的"0"为false:
>>> "0" == false
true
>>> false == "0"
true
那么下面为什么打印“哈”呢?
>>> if ("0") console.log("ha")
ha
如下所示,Javascript中的"0"为false:
>>> "0" == false
true
>>> false == "0"
true
那么下面为什么打印“哈”呢?
>>> if ("0") console.log("ha")
ha
当前回答
这都是因为ECMA规格…"0" == false,因为这里指定的规则http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.3…if('0')的结果为true,因为这里指定的规则http://ecma262-5.com/ELS5_HTML.htm#Section_12.5
其他回答
我从搜索中心来到这里,寻找将“0”计算为布尔值的解决方案。 上面已经解释了技术细节,所以我不会深入讨论它,但我发现一个快速的类型转换解决了它。
因此,如果有人像我一样,想要像PHP一样,将字符串1或0计算为布尔值。然后你可以做上面的一些事情,或者你可以像这样使用parseInt():
x = "0";
if(parseInt(x))
//false
显示问题的表格:
和= =
这个故事的寓意使用===
表生成credit: https://github.com/dorey/JavaScript-Equality-Table
0周围的引号使它成为一个字符串,它的值为true。
删除引号,它应该工作。
if (0) console.log("ha")
这是因为JavaScript在布尔上下文和代码中使用类型强制
if ("0")
将在布尔上下文中被强制为true。
在Javascript中还有其他的真值,在布尔上下文中会被强制为真,因此执行if块:-
if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
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/