JavaScript如何评估语句表达式?

Buc*_*ket 1 javascript

我一直认为JavaScript的if陈述对他们的论点做了某种铸造魔术,但我对幕后的实际情况有点警惕.

我最近发现了一个JavaScript比较表,并注意到即使-1 == true求值为false,if(-1){...}也会执行.

那么在JavaScripts if语句中,表达式会发生什么?假设它用于!!{expression}将其转换为反布尔值,然后再将其反转,似乎是合理的,但如果是这种情况,JS如何判断对象的反布尔表示是否真实?

Som*_*ens 5

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.