我试图在这里理解一些东西,最好的解释自己的方法是举一个例子:
"" == 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" == false
(true
)。
使用松散比较(==
)比较不同数据类型的值时,它们总是被强制转换为数字(如果将对象与字符串进行比较,则可能会强制为字符串)。
请参阅specification,以获取有关比较算法的更多信息。