我试图在这里理解一些东西,最好的解释自己的方法是举一个例子:

"" == false
// true

"0" == false
// true

false == false
// true


但是这里发生了什么?

"" == "0"
// false


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

我确实意识到我要在此处比较两个字符串,但是该语言如何知道"a" == "b""" == "0"之间的区别?在这种情况下,胁迫如何发生?

最佳答案

为什么在JavaScript中“” ==“ 0”为假?


因为操作数是两个内容不同的字符串。类型强制仅在操作数的数据类型不同时才发生。

相关问题:


Why does ('0' ? 'a' : 'b') behave different than ('0' == true ? 'a' : 'b')
'\n\t\r' == 0 is true?





  如果""评估为false并且"0"评估为false逻辑预测它与我编写false == false相同


让我们看看如何真正解决比较:

"" == false被强制为0 == 0

"0" == false被强制为0 == 0

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

如您所见,"0"不会“评估”为false,它会转换为整数,然后对该值进行比较。 (""的计算结果为false(空字符串),但转换为数字时为0)。

将值转换为布尔值并将比较值与布尔值之间有很大的区别。最明显的示例:!!"0"true)和"0" == falsetrue)。

使用松散比较(==)比较不同数据类型的值时,它们总是被强制转换为数字(如果将对象与字符串进行比较,则可能会强制为字符串)。

请参阅specification,以获取有关比较算法的更多信息。

10-05 20:30
查看更多