Javascript 中 ==(相等運算符) 和 ===(嚴格相等運算符) 區別

在JS中,"==="叫作嚴格運算符,"=="叫作相等運算符。數組

它們的區別是相等運算符(==)比較兩個值是否相等,嚴格相等運算符(===)比較它們是否爲「同一個值」。函數

若是兩個值不是同一類型,嚴格相等運算符(===)直接返回false,而相等運算符(==)會將它們轉化成同一個類型,再用嚴格相等運算符進行比較。spa

 

嚴格運算符的運算規則以下:code

(1)不一樣類型值 若是兩個值的類型不一樣,直接返回false。對象

18 === "18";// false
"true"=== true; // false
1===1; //true

 

(2)同一類的原始類型值 同一類型的原始類型的值(數值、字符串、布爾值)比較時,值相同就返回true,值不一樣就返回false。  blog

NaN === NaN;  // false
//NaN與任何值都不相等;(包括自身)
+0 === -0; // true

 

(3)同一類的複合類型值  兩個複合類型(對象、數組、函數)的數據比較時,不是比較它們的值是否相等,而是比較它們是否指向同一個對象。  字符串

{} === {}; // false
[] === []; // false
(function (){} === function (){}); // false
var v1 = {};
var v2 = v1;
v1 === v2; // true
//兩個變量引用同一個對象,則它們相等

 

(4)undefined和null  undefined 和 null 與自身嚴格相等。it

undefined === undefined; // true
null === null; // true
var v1; var v2; v1 === v2; // true
//變量聲明後默認值是,所以兩個只聲明未賦值的變量是相等的。undefined

 

相等運算符在比較相同類型的數據時,與嚴格相等運算符徹底同樣。io

 在比較不一樣類型的數據時,相等運算符會先將數據進行類型轉換,而後再用嚴格相等運算符比較。類型轉換規則以下:console

(1)原始類型的值  原始類型的數據會轉換成數值類型再進行比較。字符串和布爾值都會轉換成數值.

複製代碼
1 == true; // true
// 等同於 1 === 1

0 == false; // true
// 等同於 0 === 0

2 == true; // false
// 等同於 2 === 1

2 == false; // false
// 等同於 2 === 0

'true' == true; // false
// 等同於 Number('true') === Number(true)
// 等同於 NaN === 1

'' == 0; // true
// 等同於 Number('') === 0
// 等同於 0 === 0

'' == false;  // true
// 等同於 Number('') === Number(false)
// 等同於 0 === 0

'1' == true;  // true
// 等同於 Number('1') === Number(true)
// 等同於 1 === 1

'\n  123  \t' == 123; // true
// 由於字符串轉爲數字時,省略前置和後置的空格
複製代碼

 

 (2)對象與原始類型值比較  對象(這裏指廣義的對象,包括數值和函數)與原始類型的值比較時,對象轉化成原始類型的值,再進行比較。

 

 

 (3)undefined和null  undefined和null與其餘類型的值比較時,結果都爲false,它們互相比較時結果爲true。

複製代碼
false == null; // false
false == undefined; // false

0 == null; // false
0 == undefined; // false

undefined == null; // true
複製代碼

特別提醒:相等運算符的缺點

1.相等運算符隱藏的類型轉換,會帶來一些違反直覺的結果。

複製代碼
'' == '0'  ;         // false
0 == '';             // true
0 == '0' ;           // true

2 == true ;          // false
2 == false;          // false

false == 'false' ;  // false
false == '0' ;       // true

false == undefined;  // false
false == null;       // false
null == undefined ;  // true

' \t\r\n ' == 0;     // true
複製代碼

2.使用相等運算符可能會對後續代碼形成意外影響.

複製代碼
var a = undefined; 
if(a == null){     
    console.log("1"); //1
} 
var a = undefined; 
if(a === null){     
    console.log("1"); //無輸出
}//使用不當,執行意圖發生改變.
相關文章
相關標籤/搜索