javascript 中==和===的區別
對於JavaScript中比較運算子,可能大家用的比較多的是“==”、對於“===”很多人可能很陌生。=== 表示恆等,首先比較兩邊的變數資料型別是否相等,其次比較兩邊的變數的數值是否相等;== 表示相等即僅僅比較兩邊變數的數值是否相等。
一、“===”首先計算其運算元的值,然後比較這兩個值,比較過程沒有任何型別轉換
1、如果兩個值型別不相同,則它們不相等。
2、如果兩個值都是null或者都是undefined,則它們不相等。
3、如果兩個值都是布林值true或false,則它們相等。
4、如果其中一個值是NaN,或者兩個兩個值都是NaN,則它們不相等。NaN和其他任何值都是不相等的,包括它本身!!!通過x!==x來判斷x是否為NaN,只有在x為NaN的時候,這個表示式的值才為true。
5、如果兩個值為數字,且數值相等,則它們相等。如果一個為0,另一個為-0,則它們同樣相等。
6、如果兩個值為字串,且所含的對應位上的16位數完全相等,則它們相等。如果它們的長度或內容不同,則它們不等。兩個字串可能含義完全一樣且所顯示出手字元也一樣,但具有不同編碼的16位值。JavaScript並不對Unicode進行標準化的轉換,因此像這樣的字串通過"==="和"=="運算子的比較結果也不相等。
7、如果兩個引用值同一個物件、陣列或函式,則它們是相等的。如果指向不同的物件,則它們是不等的。儘管兩個物件具有完全一樣的屬性。
例如
var param1= ‘1’, param2 = ‘1’ ;
param1 === param2; //型別和數值同時相等 true
var param3 = 1;
param1 === param3; //型別不相等和數值相等false
var param4 = 2;
param1 === param4; //型別和數值都不相等 false
var param1 = null, param2 = undefined;
param1 === param2; //false
https://www.houdianzi.com/ logo設計公司
二、相等運算子“==”如果兩個運算元不是同一型別,那麼相等運算子會嘗試一些型別轉換,然後進行比較
1、如果一個值是null,另一個是undefined,則它們相等。
2、如果一個值是數字,另一個是字串,先將字串轉換為數字,然後使用轉換後的值比較。
3、如果其中一個值是true,則將其轉換為1再進行比較。如果其中一個值是false,則將基轉換為0再進行比較。
4、如果一個值是物件,另一個值是數字或字串,則將物件轉換為原始值,然後再進行比較。物件通過toString()方法或valueOf()方法轉換為原始值。JavaScript核心的內建類首先嚐試使用valueOf(),再嘗試使用toString(),除了日期類,日期類只使用toString()轉換。那些不是JavaScript語言核心中的物件則通過各自的實現中定義的方法轉換為原始值。
5、其他不同型別之間的比較均不相等.
例如
var param1= ‘1’, param2 = ‘1’ ;
param1 == param2; //型別和數值同時相等true
var param3 = 1;
param1 == param3; //型別不相等和數值相等true
var param4 = 2;
param1 == param4; //型別和數值都不相等false
var param1 = null, param2 = undefined;
param1 === param2; //true