iteye_7127
iteye_7127
2009-06-10 22:31

"true"==true的比较

已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • wanghaolovezlq wanghaolovezlq 12年前

    看看规范:

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

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

    点赞 评论 复制链接分享
  • ywbanm ywbanm 12年前

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

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

    点赞 评论 复制链接分享
  • ywbanm ywbanm 12年前

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

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 12年前

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

      比较对象、数组、函数的时候,使用的是引用,只有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个都是未定义的,那么他们相等。

    点赞 评论 复制链接分享
  • nafish nafish 12年前

    貌似规范说的很模糊哦~

    点赞 评论 复制链接分享
  • nafish nafish 12年前

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

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

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

    点赞 评论 复制链接分享

相关推荐