问题在标题中。我刚刚尝试在 Chrome 控制台中运行下一条语句并且得到了奇怪的(对我而言)结果:
true == 'true' // returns false
'true' == true // returns false
为什么会这样?为什么类型转换在那里不起作用,但在下一个语句中起作用?
if ('true') true // returns true
问题在标题中。我刚刚尝试在 Chrome 控制台中运行下一条语句并且得到了奇怪的(对我而言)结果:
true == 'true' // returns false
'true' == true // returns false
为什么会这样?为什么类型转换在那里不起作用,但在下一个语句中起作用?
if ('true') true // returns true
因为它们不代表同样可转换的类型/值。使用的转换比 使用的简单转换==复杂得多。toBooleanif ('true')
所以给定这段代码true == 'true',它会发现:
“如果
Type(x)是Boolean,则返回比较结果ToNumber(x) == y。”
因此,您会看到它从成为 开始ToNumber(true) == 'true',即1 == 'true',然后再次尝试,它现在找到了:
如果
Type(x)是Number和Type(y)是String,返回比较的结果x == ToNumber(y)。
所以现在它正在做1 == ToNumber('true'),这是1 == NaN,当然是false。
true = 布尔类型
'true' = 字符串类型
表达式 "if ('true')" 以与 if('foo') 或任何其他字符串相同的方式将 'true'(string) 评估为 true(boolean)。
非空字符串将返回 true:
if ('0') true; // true if ('false') true; // true if ('anything') true; // true 空字符串将返回 undefined ,因此是falsy:
if ('') true; // not true在比较类型时,JavaScript 会尝试为您做一些魔术:
if (1 == "1") true; // true但是将字符串转换为布尔值时失败:
if(true == "true") true; // not truetrue 是一个布尔值 'true' 是一个字符串。
您正在比较不同的数据类型。 看这里:http://w3schools.com/js/js_datatypes.asp