在js中相等比較運算子的處理情況是比較複雜的,總結大致有如下四條規則:
1、如果等號兩側為undefined和null,那麼表示式返回true;
console.log(null==undefined); //true
複製程式碼
2、如果等號兩側為原始型別(Number,String,Boolean),那麼預設轉換成數字再進行比較,如果等號兩側資料型別相同那麼就相當於全等
console.log(1=='1'); //true(相當於1和1的比較)
console.log(1=='true'); //false(相當於1和NaN的比較)
console.log(1==true); //true(相當於1和1的比較)
console.log('true'==true); //false(相當於NaN和1的比較)
複製程式碼
3、如果是引用型別的比較,先使用valueOf方法獲取他的原始值,如果原始值為原始型別的話按照規則而再做處理,否則直接比較他們的引用
1、
var obj1={
a:1
}
var obj2={
a:1
}
console.log(obj1==obj2);//false(先用valueOf獲取他們的值{a:1},發現不是原始型別,那麼就要進行引用的比較,隱藏返回false)
2、
var a=1;
var b=new Number(1);
console.log(a==b);//true (右邊通過物件的valueOf方法獲得了他的原始值1,再進行比較)
複製程式碼
4、如果不符合上述三條規則,js的直譯器預設都返回false,如下:
console.log(0==null); //false
console.log(0==undefined); //false
console.log(false==null); //false
console.log(false==undefined); //false
複製程式碼