我一直认为JavaScript的if陈述对他们的论点做了某种铸造魔术,但我对幕后的实际情况有点警惕.
我最近发现了一个JavaScript比较表,并注意到即使-1 == true求值为false,if(-1){...}也会执行.
那么在JavaScripts if语句中,表达式会发生什么?假设它用于!!{expression}将其转换为反布尔值,然后再将其反转,似乎是合理的,但如果是这种情况,JS如何判断对象的反布尔表示是否真实?
JavaScript很不稳定.
是的,-1 == true导致错误,但这不是if语句正在做的事情.它正在检查语句是否"真实",或转换为true.在JavaScript中,这相当于!!-1,它确实导致为真(除了零以外的所有数字都是真实的).
当使用数字和布尔值时,规范定义了双等于运算符以执行以下操作:
如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).
ToNumber会将布尔值true转换为数字1,因此您要比较:
-1 == 1
Run Code Online (Sandbox Code Playgroud)
任何人都能告诉你的事实显然是错误的.
另一方面,一个if语句正在调用ToBoolean,它会考虑任何非零的非NaN数true.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |