JavaScript的=、==和===

 

 

(1) 百度知道上的解釋: 程序員

= 爲對象賦值 編程

== 表示兩個對象toString相等 數組

=== 表示兩個對象類型相同且值相等 函數

 

(2)  知乎上的解釋: 編碼

絕大多數場合應該使用 === ,只有檢測 null/undefined 的時候能夠使用 x == null ,由於一般咱們不區分 null undefined ,即將 x == null 做爲 x === null || x === undefined 的縮寫。
==
的比較看似會比較方便,好比 1 == '1' ,可是會埋下隱患,好比可能對類型作出錯誤的假設。
例子:  if (x == 10) x += 5
若是傳入的x是字符串'10'x的結果會變成'105'。在後續運算中字符串'105'又可能被轉型,從而引入隱蔽的錯誤。
另外,程序員可能不自覺的依賴某些假設——好比相等比較應該具備傳遞性,即 a = b b = c,應該能得出 a = c。可是JavaScript == 不具備傳遞性。好比 0 == '0' 0 == '',可是 '0' != ''
因此 @李遙 的說法也是錯誤的,JS == 並不是是 Java/C# equals() ,由於 Java/C# 語言都是要求 equals() 必須保證傳遞性的。
總之,對於大型編程來講,== 的這點小小的便利性沒法與其帶來的風險相比。 spa

 

(3)  CSDN上的解釋: code

 JavaScript支持「=」「==」「===」運算符。你應當理解這些(賦值、相等、恆等)運算符之間的區別,並在編碼過程當中當心使用。 orm

         JavaScript對象的比較是引用的比較,而不是值的比較。對象和其自己是相等的,但和其餘任何對象都不相等。若是兩個不一樣的對象具備相同數量的屬性,相同的屬性名和值,它們依然是不相等的。相應位置的數組元素是相等的兩個數組也是不相等的。 對象

       嚴格相等運算符「===」首先計算其操做數的值,而後比較這兩個值,比較過程沒有任何類型轉換: ip

若是兩個值類型不相同,則它們不相等。

若是兩個值都是null或者都是undefined,則它們不相等。

  • 若是兩個值都是布爾值truefalse,則它們相等。
  • 若是其中一個值是NaN,或者兩個兩個值都是NaN,則它們不相等。NaN和其餘任何值都是不相等的,包括它自己!!!經過x!==x來判斷x是否爲NaN,只有在xNaN的時候,這個表達式的值才爲true
  • 若是兩個值爲數字,且數值相等,則它們相等。若是一個爲0,另外一個爲-0,則它們一樣相等。
  • 若是兩個值爲字符串,且所含的對應位上的16位數徹底相等,則它們相等。若是它們的長度或內容不一樣,則它們不等。兩個字符串可能含義徹底同樣且所顯示出手字符也同樣,但具備不一樣編碼的16位值。JavaScript並不對Unicode進行標準化的轉換,所以像這樣的字符串經過"===""=="運算符的比較結果也不相等。
  • 若是兩個引用值同一個對象、數組或函數,則它們是相等的。若是指向不一樣的對象,則它們是不等的。儘管兩個對象具備徹底同樣的屬性。
  • 相等運算符「==」和恆等運算符類似,但相等運算符的比較並不嚴格。若是兩個操做數不是同一類型,那麼相等運算符會嘗試一些類型轉換,而後進行比較:
  •  若是兩個操做數的類型相同,則和上文所述的嚴格相等的比較規則同樣。若是嚴格相等,那麼比較結果爲相等。若是它們不嚴格相等,則比較結果爲不相等。
  • 若是兩個操做數類型不一樣,「==」相等操做符也可能會認爲它們相等。檢測相等將會遵照以下規則和類型轉換: 
  1. 若是一個值是null,另外一個是undefined,則它們相等
  2. 若是一個值是數字,另外一個是字符串,先將字符串轉換爲數字,而後使用轉換後的值比較。
  3. 若是其中一個值是true,則將其轉換爲1再進行比較。若是其中一個值是false,則將基轉換爲0再進行比較。
  4. 若是一個值是對象,另外一個值是數字或字符串,則將對象轉換爲原始值,而後再進行比較。對象經過toString()方法或valueOf()方法轉換爲原始值。JavaScript核心的內置類首先嚐試使用valueOf(),再嘗試使用toString(),除了日期類,日期類只使用toString()轉換。那些不是JavaScript語言核心中的對象則經過各自的實現中定義的方法轉換爲原始值。
  5. 其餘不一樣類型之間的比較均不相等.

 



相關文章
相關標籤/搜索