与==比较时,JavaScript如何转换类型?

Nib*_*Pig 0 javascript

alert (0 == ''); // true
alert (0 == '0'); // true
Run Code Online (Sandbox Code Playgroud)

JSFiddle证明

我理解javascript中的==执行转换然后检查是否相等,但是它如何在上面的语句中执行转换?它将0转换为''或''转换为0吗?或者别的什么呢?是否有某个规范解释了实施?

use*_*716 5

它使用抽象等式比较算法.

专门针对您的示例

如果Type(x)NumberType(y)String,返回比较的结果x == ToNumber(y).

那么你最终会得到:

0 == 0
Run Code Online (Sandbox Code Playgroud)

...在两种情况下都是因为空字符串转换为数字0,而数字字符串转换为给定的数字.

9.3.1 ToNumber应用于字符串类型:

StringNumericLiteral为空或仅包含空格将转换为 +0

由于我们现在在第二次传递中对相同的Type进行比较,它将执行以下操作:

如果Type(x)是相同的Type(y),那么

......如果Type(x)Number,那么

......如果x是相同的Numbery,则返回true.


要测试toNumber转换,您可以使用一元运算+符.

console.log( +'' );   // 0
console.log( +'0' );  // 0
Run Code Online (Sandbox Code Playgroud)