问题在标题中。我刚刚尝试在 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
因为它们不代表同样可转换的类型/值。使用的转换比 使用的简单转换==
复杂得多。toBoolean
if ('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 true
true 是一个布尔值 'true' 是一个字符串。
您正在比较不同的数据类型。 看这里:http://w3schools.com/js/js_datatypes.asp