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

分類:IT技術 時間:2017-10-03

  在JS中,"==="叫做嚴格運算符,"=="叫做相等運算符。

它們的區別是相等運算符(==)比較兩個值是否相等,嚴格相等運算符(===)比較它們是否為“同一個值”。

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

 

嚴格運算符的運算規則如下:

(1)不同類型值 如果兩個值的類型不同,直接返回false。

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

 

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

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 與自身嚴格相等。

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

 

相等運算符在比較相同類型的數據時,與嚴格相等運算符完全一樣。

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

(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"); //無輸出
}//使用不當,執行意圖發生改變.

 

總結:建議盡量使用嚴格相等運算符。

推薦一下阮一峰的文章:http://Javascript.ruanyifeng.com/grammar/operator.html#toc9


Tags: 相等 運算符 類型 比較 嚴格 false

文章來源:


ads
ads

相關文章
ads

相關文章

ad