![](/img/trans.png)
[英]Why does lodash `_.all([true, true, true], true);` return `false`?
[英]Why does true == 'true' statement in JS return false?
问题在标题中。 我刚尝试在Chrome控制台中运行下一个语句并且对我来说很奇怪(对我来说)结果:
true == 'true' // returns false
'true' == true // returns false
为什么会这样? 为什么不在那里进行类型转换,但在下一个声明中有效?
if ('true') true // returns true
因为它们不代表同样可转换的类型/值。 ==
使用的转换比if ('true')
使用的简单toBoolean
转换复杂得多。
所以鉴于此代码为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'(字符串)计算为true(boolean)。
非空字符串将返回true:
if ('0') true; // true
if ('false') true; // true
if ('anything') true; // true
空字符串将返回undefined,因此是假的 :
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.