Javascript相等运算符

Ale*_* K. 1 javascript equality

在David Flanagan的Javascript指南中,有一个声明:

==运算符永远不会尝试将其操作数转换为布尔值

所以我在这里做了一点测试:

var a = false;
var b = ""; // empty string
a == b; //returns true
Run Code Online (Sandbox Code Playgroud)

看一下抽象等式比较算法有一点:

即 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true.否则,返回false.

如果y是字符串数据类型(没有转换),x和y如何都是真的?

zer*_*kms 6

引擎盖下发生了什么

如果Type(x)Boolean,则返回比较结果ToNumber(x) == y.

Number(false) == ""
Run Code Online (Sandbox Code Playgroud)

其次是

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

Number(false) == Number("") -> 0 == 0
Run Code Online (Sandbox Code Playgroud)

如果y是字符串数据类型(没有转换),x和y如何都是真的?

它们不是两者true,但在类型强制之后它们的价值是相等的.

==运算符永远不会尝试将其操作数转换为布尔值

这是正确的,如果你检查比较算法,你会发现类型永远不会被隐式地转换为Boolean.

参考文献: