JavaScript中,==與===運算子皆可用於判斷兩個值是否相等;不同之處在於,如果進行判斷的兩個值類型不一致,===運算子會直接傳回false,而==操作符則會在型別轉換後再進行判斷。詳細的判斷規則如下:
===操作符的判斷規則
1.如果兩個值的型別不一致,回傳false。
2.如果兩個值的型別一致,值一致,回傳true。 NaN是一個特例,NaN===NaN回傳false。
3.如果兩個值都是object類型,那麼與Java一樣,除非兩者引用一致(reference指向同一個物件位址),不然即使object中的內容完全一樣,也認為這兩個值不一致,對應的操作將返回false。例如,新建兩個內容完全一樣的數組,對它們進行===操作後返回結果為false — 雖然它們的內容完全一樣,但還是屬於兩個不同的物件。
4.0===-0返回true。
==操作符的判斷規則
==運算子會將值進行型別轉換後再進行比較,其型別轉換遵循以下原則:優先轉換成number後比較,Date物件則優先轉換成string後再進行比較。具體判斷規則如下:
1.如果兩個值型別一致,執行===操作後回傳。
2.null==undefined為true。
3.true將轉換成1後進行比較,false將轉換成0後進行比較。
4.如果其中一個值為對象,則將其轉換成number後再進行比較,Date對象除外。
5.如果其中一個值為Date對象,則將其轉換成string後再進行比較。
實驗
console.log("3" == 3);//true
console.log(null == undefined);//true
console.log(true == 1);//true
console.log(true == 9);//false
console.log([9] == 9);//true
console.log([9] == "9");//true
var d = new Date();
var s = d.toString();
var n = d.valueOf();
console.log(d == s);//true
console.log(d == n);//false