为什么JS中的true =='true'语句返回false?

时间:2013-10-30 18:17:18

标签: javascript

问题在标题中。我刚刚尝试在Chrome控制台中运行下一个语句并且对我来说很奇怪(对我而言)结果:

true == 'true' // returns false
'true' == true // returns false

为什么会这样?为什么没有在那里进行类型转换,但在下一个声明中有效?

if ('true') true // returns true

5 个答案:

答案 0 :(得分:15)

因为它们不代表同等可转换的类型/值。 ==使用的转化比toBoolean使用的简单if ('true')转换要复杂得多。

因此,给定此代码true == 'true',它会找到:

  

“如果Type(x)Boolean,请返回比较结果ToNumber(x) == y。”

所以你看到它从成为ToNumber(true) == 'true' 1 == 'true'开始,然后再次尝试,它现在找到:

  

如果Type(x)NumberType(y)String,请返回比较结果x == ToNumber(y)

所以现在它正在1 == ToNumber('true')1 == NaN,当然是false

答案 1 :(得分:2)

==运算符使用ECMAScript的abstract equality algorithm,这非常复杂。它的确切行为取决于所涉及的每个参数的类型,每个步骤通常涉及另一个调用另一个ECMAScript函数。

if(condition)语句使用ECMAScript的ToBooleancondition转换为布尔值,这很简单,可以在单个表中表示。正如你在规范中看到的那样,任何字符串都是真实的(根据ToBoolean),如果它的长度非零。

答案 2 :(得分:0)

true =布尔类型

'真' =字符串类型

表达式" if(' true')"以与if(' foo')或任何其他字符串相同的方式评估' true'(字符串)为true(布尔值)。

答案 3 :(得分:0)

非空字符串将返回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

但是在将字符串转换为boolean时失败了:

  • if(true == "true") true; // not true

答案 4 :(得分:-3)

true是一个布尔值 'true'是一个字符串。

您正在比较不同的数据类型。 look here: http://w3schools.com/js/js_datatypes.asp