我今天在Javascript中发现了这种行为让我彻底感到惊讶和困惑:
if ("0") {
console.log('first')
}
if ("0" == true) {
console.log('second');
}
输出:
first
我原本希望console.log
行中的两个或两个都不执行。我一直认为防护的内容被评估,强制转换为布尔值,然后根据此布尔值传递或失败。这将导致上面的两个守卫都是等效的,但观察到的行为表明还有其他事情正在发生。
Javascript如何确定警卫是否通过?