1. 程式人生 > >Javascript 中 ==(相等運算符) 和 ===(嚴格相等運算符) 區別

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

默認 number 數字 javascrip 指向 提醒 pre operator 代碼

  在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

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