2011-09-23 44 views
3

這是Crockford的JavaScript: The Good Parts這裏真的需要JavaScript身份比較嗎?

var is_array = function (value) { 
    return Object.prototype.toString.apply(value) === '[object Array]'; 
}; 

請問這代碼工作過一樣好,如果他用了一個簡單的相等比較==,而不是身份比較===

我對身份的理解是它允許你檢查一個值是否真的被設置爲特定的東西,而不僅僅是等價的東西。例如:

x == true

將評估爲true,如果x是1,或真,但

x === true如果x是真實的,只會是真實的。

有沒有可能對上述is_array功能與任何=====,而不是其他的工作嗎?

+1

Crockford提倡總是使用'==='而不是'==',但是這個代碼應該*,可能*,和任何這些運算符一樣工作(或失敗)。 – c69

+2

只有當你顯式**要啓用類型強制時才使用'=='。 (這實際上從來沒有,順便說一句) –

回答

4

在這種特殊情況下,=====將以相同的方式工作。

在這種情況下不會有真正的區別,因爲質量測試的兩邊都已經是字符串,所以==可以做的額外類型轉換不會在這裏發揮作用。由於這裏沒有任何類型轉換,因此=====將生成相同的結果。

在我自己個人的看法,我傾向於使用===除非我明確要允許類型轉換,我認爲有以下的一些結果得到驚訝可能性。

3

你是對的。用==而不是===它應該可以正常工作。

===是一種嚴格匹配,並不會爲「falsy」或「truthy」值(see this有詳細介紹)返回true。這種情況不適用於這種情況。