JavaScript:等於判斷式

JavaScritp  中有兩種等於運算子 =====
一般情況都會建議用 三個等於的 === 來比較
為什麼呢?

因為 兩個等於的 ==
在兩個運算元型別不同的時候會進行轉換 變成基本型別 或者 變成字串
例如:

1 == true  // true 被轉成 1
1 == '1'   // 1 被轉成 '1'
[] == ''   // 空陣列被轉成空字串
'' == 0    // 空字串被轉成 0

基於這樣的原因這個判斷會比較不準

用 === 來比較狀況比較好了
但是還是有一些很特殊的例子要特別記住:

- undefined、null、Infinity、字串 可以比較

// all true
undefined === undefined   
null === null   
'' === ''   
Infinity === Infinity    

- 陣列、物件、NaN 不可比較

// all false
[] === [] 
[1,2] === [1,2] 
{} === {} 
{ num: 1} === { num: 1} 
NaN === NaN 

更詳細可以看這個連結 http://zero.milosz.ca/

那如果我們還是想要比較 陣列 跟 物件呢?
– 陣列
判斷 length 是否相等,然後再逐一比較每一個 value
– 物件
比較每一個 Property 是否一致

這可以寫進 Prototype 的 equals method 裡
如果不想污染到 Prototype 可以寫成 function

更詳細可以看這個 stackoverflow 問題
http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript

或是可以使用 jquery 或者是 underscore.js 裡面內建的 function 和 method

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s