【发布时间】:2013-05-03 06:40:33
【问题描述】:
所以据我所知,Javascript 中的 if 语句将其条件的结果转换为布尔值,然后像下面这样执行它
if(true) {
// run this
}
if(false) {
// do not run this
}
这行得通。但如果我这样做:
if('0' == false) {
// We get here, so '0' is a falsy value
}
那么我会期待这个
if('0') {
// We don't get here, because '0' is falsy value
}
但是我得到了
if('0') {
// We *DO* get here, even though '0' is falsy value
}
那么发生了什么?显然,if 不检查其条件是真值还是假值,而是进行其他转换?
【问题讨论】:
-
'0'不是一个 false-y 值。请参阅有关平等为何如此有效的规范([ToBoolean]中没有其他强制规则)。 -
可能是因为
'0'是String(而不是boolean本身)。为了将'0' == false评估为真,引擎可能会在实际评估表达式之前进行一些转换。 -
我认为 if(null) { } 也不会在 JS 中执行。可能与旧的 C++ 世界有关,“任何不是 0 的东西都是真的”