2016-02-09 51 views
0

我知道Javascript類型強制(== vs ===)。Javascript filter()默認執行類型強制嗎?

我正在查看filter()函數。它似乎默認執行類型強制。它是否正確?這裏是代碼:

var x = [1,2,'hi'] 

console.log(x.filter(String)); // [ 1, 2, 'hi' ] 
console.log(x.filter(Number)); // [ 1, 2] 

如果我不想這樣的話,我會不得不添加一個回調過濾器功能?我感到驚訝,這在目前的形式工作,因爲我認爲它始終需要一個回調參數。

+0

過濾器()應該繼續爲其回調返回truthy值的元素。你的測試結果反映了什麼。你需要一個參數是什麼意思? 'String()'和'Number()'函數都帶有一個參數... – nnnnnn

+0

它至少一眼就會出現。字符串和數字在這種情況下是回調,以字符串(1/2 /「hi」)運行。 String(「hi」)== true返回false,但是!! String(「hi」)返回true。不知道這是什麼意思,但是,它似乎是通過函數運行值,然後強制結果爲布爾值。 – xiix

+0

Ahhhh。我不知道字符串和數字實際上是功能 –

回答

3

您的代碼不檢查的元素是字符串或數字。它所做的是:

String(1)返回'1' => truthy =>通過過濾器。
Number('hi')返回NaN => falsy =>不通過過濾器。

你想要做什麼可以用函數來實現:

function checkString(el) { 
    return (typeof el === 'string'); 
} 
0

StringNumber全局對象將進行轉換,如果有可能進行轉換。 the LINK

和它說,

「凡是要轉換爲字符串。」

和約NumberLINK

如果參數無法轉換爲數字,則返回NaN

NaN被採取了虛假,