alert (0 == ''); // true
alert (0 == '0'); // true
Run Code Online (Sandbox Code Playgroud)
我理解javascript中的==执行转换然后检查是否相等,但是它如何在上面的语句中执行转换?它将0转换为''或''转换为0吗?或者别的什么呢?是否有某个规范解释了实施?
它使用抽象等式比较算法.
专门针对您的示例
如果
Type(x)是Number和Type(y)是String,返回比较的结果x == ToNumber(y).
那么你最终会得到:
0 == 0
Run Code Online (Sandbox Code Playgroud)
...在两种情况下都是因为空字符串转换为数字0,而数字字符串转换为给定的数字.
StringNumericLiteral为空或仅包含空格将转换为
+0
由于我们现在在第二次传递中对相同的Type进行比较,它将执行以下操作:
如果
Type(x)是相同的Type(y),那么......如果
Type(x)是Number,那么......如果
x是相同的Number值y,则返回true.
要测试toNumber转换,您可以使用一元运算+符.
console.log( +'' ); // 0
console.log( +'0' ); // 0
Run Code Online (Sandbox Code Playgroud)