JavaScript != 不相等運算子

admin發表於2019-04-14

不相等運算子與相等運算子(==)是相對的。

關於相等運算子可以參閱JavaScript == 等號運算子一章節。

只要理解了相等運算子,那麼也就等同於理解了不相等運算子。

為了便於理解,本文再通過程式碼例項詳細介紹一下不相等運算子的用法。

一.運算子分析:

當運算子兩側的運算數不相等時,表示式返回true,否則返回false。

關鍵問題來了,運算數怎麼樣算是不相等,在普通觀念中,只要兩側的資料不同即是不相等。

然而在JavaScript中行不通,因為可能會涉及到資料型別轉換問題,首先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a=1;
let b="1";
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231126faqjdh6h5k52qjnl.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

最終表示式列印結果為false,說明兩個運算元相同。

但是從字面上看很明顯是不相同的,一個數值型別,一個是字串型別。

但是在比較之前,會首先進行資料型別轉換,嘗試將字串型別轉換成數值型別。

關於資料型別轉換更多內容可以參閱JavaScript 資料型別轉換一章節。

與不相等運算子類似的是JavaScript !== 不全等運算子,但是不全等運算子不會進行資料型別轉換。

二.比較規則如下:

前文提到過,此運算子在進行比較之前,如果兩側運算數資料型別不同,則首先嚐試進行資料型別轉換。

也就是說,比較需要遵循一定的規則,簡單總結如下:

(1).如果有運算數是布林值,那麼首先將其轉換為數值,再進行比較,true轉換為1,false轉換為0。

(2).如果運算數一個是數值型別,一個是字串型別,首先嚐試將字串轉換為數值型別。

(3).如果運算數一個是物件,另一個數字,那麼首先嚐試將物件轉換為數字。

(4).如果運算數一個是物件,另一個字串,那麼首先嚐試將物件轉換為字串。

(5).如果運算數是兩個不同的物件,那麼返回值一定是true。

(6).null與undefined比較返回值是false。

(7).如果有一個運算數是NaN,那麼返回值一定是true。

三.程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a=true;
let b="1";
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231223yhhtjgyt40n9fhhc.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

列印結果為false,說明兩個運算數相同,程式碼分析如下:

(1).首先布林值轉換為數字1,字串"1"轉換為數字1。

(2).然後再進行比較,所以列印結果為false。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a={};
let b={};
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231254fvm7boqybjfqa99c.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼可能對初學者有一定的迷惑,明明兩個一模一樣的物件。

應該是相同了,為什麼列印結果還是true呢,這是因為物件是引用型別資料。

引用型別資料比較的是引用型別資料的儲存地址,兩個物件很明顯在不同的位置儲存。

關於引用型別與值型別可以參閱JavaScript值型別和引用型別一章節。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a=undefined;
let b=null;
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231338g4vuqtvwuuz5adux.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

列印結果為false,這一點要注意一下。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a=NaN;
let b=NaN;
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231408roxzb0bob8t3tdb8.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

NaN是一個比較特殊的情況,它與任何值都不相等,包括它自己。

算是比較狠的一個角色,所以上述列印結果為true,這一個也需要特別注意一下。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let a=["螞蟻部落"];
let b="螞蟻部落";
console.log(a != b);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/14/231433uo3wz6w24ek4ebf3.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

a是一個陣列物件,b為字串,那麼兩個資料進行比較的時候。

首先嚐試將陣列物件轉換為字串,["螞蟻部落"]轉換為字串為"螞蟻部落"。

最終上述程式碼的列印結果為false,如果一個運算元是物件,另一個是數字,那麼首先將物件轉換為數字。

上面對此運算子進行了簡單例項演示,如果對本文有任何意見或者建議,可以在底部留言。

相關文章