"true"==true的比较

在javascript中,==两边的操作数是不同类型时,会将操作数转变为同一类型后再进行比较。
对于“true”==true而言,
要么将字符串“true”转变成boolean类型(“true”转变为boolean类型变成true),然后再判断;
要么将boolean类型true转变成字符串类型(true转变为字符串类型那个变成“true”),然后再判断;

按理说,“true”==true的结果应该都是true,但为啥是false呢?
迷茫中...

6个回答

看看规范:

相等运算符 (==、!=)

1.如果两表达式的类型不同,则试图将它们转换为字符串、数字或 Boolean 量。
2.NaN 与包括其本身在内的任何值都不相等。
3.负零等于正零。
4.null 与 null 和 undefined 相等。
5.相同的字符串、数值上相等的数字、相同的对象、相同的 Boolean 值或者(当类型不同时)能被强制转化为上述情况之一,均被认为是相等的。
6.其他比较均被认为是不相等的。

javascript:alert("true"==true+"");void(0);//true

javascript:alert(Boolean("true")==true);void(0);//true

"true"就是字符串类型,true是Boolean类型,只有再用+号连字符的时候,Boolean型才能转成字符串型。而字符串型需要强转成Boolean型。

貌似规范说的很模糊哦~

  比较数值、字符串、布尔值使用的都是量值。当且仅当两个变量存放的值相等的时候,他们才相等。

  比较对象、数组、函数的时候,使用的是引用,只有2个变量引用的是同一个对象时,他们才是相等的

  。两个不同的数组是完全不同的,即使他们具有完全相同的元素。对于存放对象、数组、函数的引用的变量来

  说,只有当他们引用的是同一个对象、数组、函数的时候,他们才相等。

  注意!应遵循的原则:

  当两个运算数的类型不同时:将他们转换成相同的类型,

  1)一个数字与一个字符串,字符串转换成数字之后,进行比较。

  2)true转换为1、false转换为0,进行比较。

  3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较。(先使用valueOf,如果不行就使用toString)

  4)其他类型的组合不相等。

  想两个运算数类型相同,或转换成相同类型后:

  1)2个字符串:同一位置上的字符相等,2个字符串就相同。

  2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。

  3)2个都是true,或者2个都是false,则想同。

  4)2个引用的是同一个对象、函数、数组,则他们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。

  5)2个null,或者2个都是未定义的,那么他们相等。

楼主试试 alert("1" == true); 就明白了

楼上的哥们,总结的少了一点,类型转换并不是固定的,而是根据运算符的优先级的不同而变化.

[url=http://blog.csdn.net/zany_hui/articles/989784.aspx]看这里[/url]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐