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
二、 相等運算子“==”如果兩個運算元不是同一型別,那么相等運算子會嘗試一些型別轉換,然后進行比較
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
注: 該文章屬于轉載,如有侵權,還請留言告知,將進行洗掉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/227637.html
標籤:JavaScript
