1. 程式人生 > 實用技巧 >js相等(==)與全等(===)的區別

js相等(==)與全等(===)的區別

相等是“==”,而全等是“===”,相等和全等的區別,總結就是:

  • 相等 ==:先轉換型別再比較
  • 全等 ===:直接比較,不轉換型別,只要是型別不同就不相等,型別相同的看值是否相等
  • Object.is(value1,value2):ES6 提出“Same-value equality”(同值相等)演算法,用來解決這個問題。Object.is就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。

Object.is與“===”不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。

例如:

  1. 55 == "55" // true
  2. 55 === "55" // false

分析程式碼,對於相等來說”55”會被轉換成number型別的55,所有比較後相等,但是對於全等來說,”55”不會被轉換,由於型別不同(一個number一個String)所有比較之後為false,所以對於全等來說,必須保證資料型別也相同

相等轉換規則:

  • 對於boolean值,false轉換為0,true轉換為1

程式碼為:

  1. true == 1 // true
  2. true == 2 // false
  • 如果一個運算元是字串,另一個是數值,比較之前將字元轉換為數值

程式碼為:

"5" == 5  // true
  • null 與 undefined比較是相等的,而且對比之前不能將null與undefined轉換成其他值

程式碼為:

  1. null == undefined // true
  2. null == 0 // false
  3. undefined == 0 // false
  • 如果兩個運算元是物件,那麼比較他們是不是指向同一個物件。

程式碼為:

  1. var a = {}
  2. var b =a
  3. a == b // true
  4. c = {}
  5. a == c // false
  • 有一個操作符為NaN就返回false

程式碼為:

  1. NaN == NaN // false
  2. 5 = NaN // false
  3. NaN === NaN //false
  • 如果其中一方是否為 object 且另一方為 string、number 或者 symbol , 將 object 轉為原始型別再進行判斷
  1. let person1 = {
  2. age: 25
  3. }
  4. let person2 = person1;
  5. person2.gae = 20;
  6. console.log(person1 === person2); //true,注意複雜資料型別,比較的是引用地址
  • new Number()是一個內建的函式建構函式。 雖然它看起來像一個數字,但它並不是一個真正的數字:它有一堆額外的功能,是一個物件。當我們使用==運算子時,它只檢查它是否具有相同的值,所以a和b是相等的;然而,當我們使用===操作符時,型別和值都需要相等,b和a與c的型別不一樣,所以不等。

==會引發隱式型別轉換,右側的物件型別會自動拆箱為Number型別。

  1. let a = 3;
  2. let b = new Number(3);
  3. let c = 3;
  4. console.log(a == b); //true
  5. console.log(a === b); //false
  6. console.log(b === c); //false

思考:[] == ![]

我們來分析一下:[] == ![]是true還是false?

  1. 首先,我們需要知道 ! 優先順序是高於 == (更多運算子優先順序可檢視:運算子優先順序)
  2. ![]引用型別轉換成布林值都是true,因此![]的是false
  3. 根據上面的比較方法,其中一方是 boolean,將 boolean 轉為 number 再進行判斷,false轉換成 number,對應的值是 0.
  4. 根據上面比較方法,有一方是 number,那麼將object也轉換成Number,空陣列轉換成數字,對應的值是0.(空陣列轉換成數字,對應的值是0,如果陣列中只有一個數字,那麼轉成number就是這個數字,其它情況,均為NaN)
  5. 0 == 0; 為true

原文:https://blog.csdn.net/m0_37686205/article/details/88554346?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160965774416780277046963%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160965774416780277046963&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-19-88554346.pc_search_result_cache&utm_term=JS%20%E4%B8%AD%20==%20%E5%92%8C%20===%20%E5%8C%BA%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88