javascript入門#2.弄清楚==和===的差異

==如果翻譯成中文的話會是相等(equal),而===翻譯成中文則會是相同(identity)

但是這兩個運算子卻有些差異,例如:

1 == “1”  為true

而,
1 === “1”  卻為false

會這樣的原因為這牽扯到javascrip會自動做型別轉換。===採用比較嚴格的定義,檢視兩者運算元是否完全等同;而==則採取較為寬鬆的定義,它允許型別轉換。

以下為在使用==與===判斷的時候應該注意的事情:

一.用===運算子比較的兩個值是否相等
a.如果兩個值的型態不同,兩者便不相等。
b.如果兩者都是數字且數值相同,則它們相等。不過若有任一個為NaN則它們不相等,NaN不等於任何值,所以即便兩邊都是 NaN,它們還是不會等於對方。
c.兩者都是字串,且字元的內容與順序相等,則兩者相等。若字串長度或內容不一,則兩者不相等。
d.兩邊都是true或false,則相等。
e.如果兩者都指向同一物件.陣列.或函式,則相等;若指向不同物件,即便兩者有相同屬性或相同元素,兩者仍不相等。
f.如果兩邊都是null或undefined,則相等。

二.用==運算子比較的兩個值是否相等
a.如果兩邊型態相等,則檢視兩者是否等同,若值相同,則相等,反之,則不相等。
b.如果兩邊型態不同,仍然有可能相等,規則如下:
(1).如果其中一個是null,一個是undefined,則兩者相等。
(2).如果其中一個是數字,另一個是字串,則將字串轉成數字,再用轉換後的值做比較。
(3).如果其中一個值是true,把它轉換乘1在做比較,如果其中一個值是false,則轉換乘0再做比較。
這裡的意思為
1 == true 或 ‘1’== true時為true,但請注意2 == true或 ‘2’==true時為false
(4).如果其中一個是物件,另一個是數字或字串,則把物件轉換成基本型態再做比較(可以用toString()或valueOf(())。Javascript內建的類別會先試著用valueOf(),再用toString()做轉換。只有Date類別會先執行toString()轉換。而非Javascript核心部份的物件,可能有自己依實作定義的轉換方式。
(5).其他任意型態的組合,則不相等。

以上為javascript在==以及===上的差異,之後會發表更多javascript入門文章當作參考。

更多javascript入門文章可以參考以下:

1.javascript入門#1.瀏覽器初始化