js ==與===區別

一、對於string,number等基礎類型,==和===是有區別的函數

1)不一樣類型間比較,==之比較「轉化成同一類型後的值」看「值」是否相等,===若是類型不一樣,其結果就是不等
2)同類型比較,直接進行「值」比較,二者結果同樣
 
二、對於Array,Object等高級類型,==和===是沒有區別的
進行「指針地址」比較
 
三、基礎類型與高級類型,==和===是有區別的
1)對於==,將高級轉化爲基礎類型,進行「值」比較
2)由於類型不一樣,===結果爲false
 

有時候會看到在判斷兩個對象是否相等的時候使用了三個等號(===),它和兩個等號(==)有什麼區別呢?簡單來講就是使用「==」時,若是兩邊類型不一樣,js引擎會把它們轉換成相同類型而後在進行比較,而「===」則不會進行類型轉換,所以當兩邊不是屬於同一個類型,確定不相等。例如:.net

var a = 0, b = '0';

alert((a == b) + '--' + (a === b))

此時看到的結果爲「true–false」。指針

=== 判斷規則對象

  1. 若是類型不一樣,就[不相等]
  2. 若是兩個都是數值,而且是同一個值,那麼[相等];(!例外)的是,若是其中至少一個是NaN,那麼[不相等]。(判斷一個值是不是NaN,只能用isNaN()來判斷)
  3. 若是兩個都是字符串,每一個位置的字符都同樣,那麼[相等];不然[不相等]。
  4. 若是兩個值都是true,或者都是false,那麼[相等]。
  5. 若是兩個值都引用同一個對象或函數,那麼[相等];不然[不相等]。
  6. 若是兩個值都是null,或者都是undefined,那麼[相等]。

== 判斷規則:blog

  1. 若是兩個值類型相同,進行 === 比較。
  2. 若是兩個值類型不一樣,他們可能相等。根據下面規則進行類型轉換再比較:
  • 若是一個是null、一個是undefined,那麼[相等]。
  • 若是一個是字符串,一個是數值,把字符串轉換成數值再進行比較。
  • 若是任一值是 true,把它轉換成 1 再比較;若是任一值是 false,把它轉換成 0 再比較。
  • 若是一個是對象,另外一個是數值或字符串,把對象轉換成基礎類型的值再比較。對象轉換成基礎類型,利用它的toString或者valueOf方法。js核心內置類,會嘗試valueOf先於toString;例外的是Date,Date利用的是toString轉換。非js核心的對象,令說(比較麻煩,我也不大懂)
  • 任何其餘組合,都[不相等]。

特別須要注意的是true、false的轉換,例如:字符串

alert(true == 1);  //ture
alert(true == 2); //false, true會轉換成number,也就是1,固然 1 不等於 2
//可使用 !! 來把一個數據類型轉換爲boolean型
alert(true == !!2) //true,!2 === false !(!=2) = !false = true

另外在js中,若是把一個變量用在邏輯運算中,那麼變量在無初始值或者其值爲 0、-0、null、」"、false、undefined 或者 NaN時,它的值爲 false。不然,其值爲 true。string

 

轉自:http://blog.csdn.net/wxdzxl/article/details/8502119基礎

相關文章
相關標籤/搜索