在javascript中,==两边的操作数是不同类型时,会将操作数转变为同一类型后再进行比较。
对于“true”==true而言,
要么将字符串“true”转变成boolean类型(“true”转变为boolean类型变成true),然后再判断;
要么将boolean类型true转变成字符串类型(true转变为字符串类型那个变成“true”),然后再判断;
按理说,“true”==true的结果应该都是true,但为啥是false呢?
迷茫中...
看看规范:
相等运算符 (==、!=)
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]