嗨,大家一直在絞盡腦汁,閱讀關於這個主題的文章,我讀過的所有陳述的「一些字符串」或「一個」都被認爲是真的,但是當我編寫代碼測試一個數組來過濾掉它所說的字符串和字符是虛假的虛假物品。我不知道如何使用.filter(布爾)來解決這個問題,但想知道爲什麼我的代碼不會在這裏工作是我的代碼爲什麼字符或字符串被認爲是在javascript中的falsy
嗨,大家一直在絞盡腦汁,閱讀關於這個主題的文章,我讀過的所有陳述的「一些字符串」或「一個」都被認爲是真的,但是當我編寫代碼測試一個數組來過濾掉它所說的字符串和字符是虛假的虛假物品。我不知道如何使用.filter(布爾)來解決這個問題,但想知道爲什麼我的代碼不會在這裏工作是我的代碼爲什麼字符或字符串被認爲是在javascript中的falsy
的isNaN(arr[i]) === true
導致它通過。 "some string"
將被強制爲一個數字,然後isNaN將評估爲true。
見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Examples
對於你的情況,isNaN( 「一些字符串」)將真正。
嘗試:
function filter(arr) {
var filteredArray = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
filteredArray.push(arr[i]);
}
}
return filteredArray;
}
記住,你也可以通過
if (arr[i] == false) {
}
更換
if (arr[i]) {
}
===還比較了類型的值。
正如其他人指出的那樣,問題在於isNaN(arr[i])
,因爲無法解析爲數字的字符串將被強制爲NaN
。如果你想使用isNaN
,你應該先測試它是否是一個數字。所以更換
isNaN(arr[i]) === true
有:
(typeof arr[i] === 'number' && isNaN(arr[i]))
您還可以使用Number.isNaN(arr[i])
。這不會首先將其參數強制轉換爲數字,如果參數不是數字,則返回false
。
@dandavis謝謝,我補充說,答案。 – Barmar
要澄清,哪些比較(等)你在質疑? –
要檢查'arr [i]'是否是虛假的,只要做這個'if(arr [i])'就足夠了! 'if(arr [i]){truthy} else {falsy}'!或者使用'NOT!''if(!arr [i]){falsy}'! –