严格相等运算符:===
在执行严格运算符时,会首先计算操作符的值,然后比较这两个值;具体如下:
(1)如果两个操作数类型不同,则返回false;
(2)操作数中只要出现NaN,则返回false;
(3)二者都为null或undefined,则为true;一个为null,一个为undefined,则为false;
(4)操作数都为true或false时,则返回true;
(5)操作数都为数字,且数值相等时,则返回true;(并且-0===0为true);
(6)操作数都为字符串,且各个位上的字符都相等时,则返回true;
(7)两个引用指向同一个对象、函数或数组时,则返回true;
相等运算符:==
它的比较并不严格,当操作数的类型一致时,它会按照严格相等的规则进行比较,但当操作数的类型不一致时,它会尝试进行类型转换;
(1)一个是null,一个是undefined时,则返回true;
(2)一个值是字符串,一个是数字时,会首先将字符串转换为数字,然后用转换后的值进行比较;
(3)如果其中的一个操作数为true或false,则会将其先转换为1或0再比较(true:1,false:0);
(4)如果一个值为对象,另一个值为数字或是字符串,则会先将对象转换为原始值(valueof函数),再进行比较;
(5)其它不同类型之间的比较均为不相等;
总结:
严格相等(===):类型一样+值一样(不执行类型转换);
相等(==):先对比较对象进行类型转换,转换成同一类型后在进行值得比较;
举例:
var a = {name : "elaine"};
var b = {name : "elaine"};
var c=a;
a==b;//false
a==c; //true
a===b; //false
a===c; //true
又如:
"true"==1; //false
因为字符串true不能被转换成数值,因此在转换时会返回NaN,因此为false;