我一直认为 JavaScript 的 if
语句对它们的论点施展了某种魔法,但我对幕后实际发生的事情有点警惕。
我最近发现了一个JavaScript comparison table并注意到即使 -1 == true
的计算结果为 false
,if(-1){...}
也会执行。
那么在 JavaScript 的 if
语句中,表达式会发生什么变化?假设它使用 !!{expression}
将其转换为反 bool 值,然后再次反转它似乎是合理的,但如果是这样的话,JS 是如何决定一个对象的反 bool 表示是否是真实与否?
最佳答案
JavaScript 很不稳定。
是的,-1 == true
结果为 false,但这不是 if 语句的作用。它正在检查语句是否“真实”或转换为真。在 JavaScript 中,这等同于 !!-1
,确实结果为真(除零以外的所有数字均为真)。
为什么?!?
The spec defines双等于运算符在出现数字和 bool 值时执行以下操作:
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
ToNumber会将 bool 值 true
转换为数字 1
,因此您正在比较:
-1 == 1
任何人都可以告诉你这显然是错误的。
另一方面,if
语句正在调用 ToBoolean
,它将任何非零、非 NaN 数字视为 true
。
关于javascript - JavaScript 如何评估 if 语句表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723067/