为什么""=="0"在javascript中是假的?

Ale*_*der 0 javascript

我想在这里理解一些东西,解释自己的最佳方式是举个例子:

"" == false
// true

"0" == false
// true

false == false
// true
Run Code Online (Sandbox Code Playgroud)

但这里发生了什么?

"" == "0"
// false 
Run Code Online (Sandbox Code Playgroud)

如果""评估false"0"评估false逻辑,则预测它与我写的相同false == false.

我确实意识到我试图在这里比较两个字符串,但语言如何知道"a" == "b"或者之间的区别"" == "0"?在这种情况下如何发生强制?

Fel*_*ing 12

为什么""=="0"在javascript中是假的?

因为操作数是两个具有不同内容的字符串.类型强制只需要的地方,如果操作数的数据类型是不同的.

相关问题:


如果""求值为false并且"0"计算false逻辑预测它与我写的相同false == false

让我们看看比较实际如何解决:

"" == false 被胁迫 0 == 0

"0" == false 被胁迫 0 == 0

false == false:相同的数据类型,因此直接比较值

如您所见"0",不会"评估" false,它会转换为整数,并对该值进行比较.(""确实评估为false(空字符串)但是当转换为数字时,它是0).

值转换为布尔值并将值与布尔值进行比较之间存在很大差异.最明显的例子:!!"0"(true)和"0" == false(true).

当您将不同数据类型的值与松散比较(==)进行比较时,它们始终强制为数字(或者可能是字符串,如果您要将对象与字符串进行比较).

有关比较算法的更多信息,请查看规范.