免責宣告:我是JS的新手。 所以,我所有的測驗都通過了,只有一個--最后一個--我不知道如何解決它。為什么0會回傳最后一個元素而不是一個空陣列?另外,當我試圖使用一個默認值時,它回傳了錯誤的值,因此我決定加入一個條件陳述句。
const takeRight = (array, n)=> {
n = -n;
//為'n'設定默認值和負值:如果沒有數字,那么n應該是-1。
const condition = !n ? -1 : n;
return array.slice(condition)。
};
console。 log(takeRight([1, 2, 3]) )。) // return [3] --> expected [3]
console。 log(takeRight[1, 2, 3], 2))。) //returns [2, 3] --> expected [2,3]
console。 log(takeRight[1, 2, 3], 5))。) //returns [1, 2, 3] --> expected [1,2,3]
console。 log(takeRight[1, 2, 3], 0))。) //returns [3] --> expected []
uj5u.com熱心網友回復:
問題出在計算condition變數上:
const condition = !n ? -1 : n;
運算式!0為真,所以n在有0值時被改為-1。
如果你想檢查的不是一個數字,使用isNaN。
const takeRight = (array, n)=> {
n = isNaN(n) ? -1 : -n;
return array.slice(n)。
};
uj5u.com熱心網友回復:
問題可能是你的運算式。檢查 "不是一個數字"
const condition = isNaN(n) ? -1 : n。
MDN: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/isNaN
uj5u.com熱心網友回復:
所以,首先,你不應該重新分配引數。但這里的實際問題是使用!n來測驗它是否存在。這可能是一個整潔的技巧,但實際上只是令人困惑。在JavaScript中用!作為任何東西的前綴,會把它變成一個布林值,然后否定它,這種轉換的規則并不明顯,而且在每種語言中也不一樣。但是在JS中,!0給你的結果和!undefined或!null一樣,因為數字0通常象征著一個 "非狀態",基本上是一個false,但更短。總之,為了避免這一切,只需使用默認引數,并在回傳陳述句中使用三元運算子來檢查n = 0的特定情況,如:
const takeRight=(array, n = 1)=> n === 0 ? [] : condition array.slice(-n)。
當然,你也可以把這句話說得更啰嗦一些:
const takeRight = (array, n = 1)=> {
if (n == 0) {
return [];
}
return condition array.slice(-n)。
};
編輯:即使是!""也會順便回傳true,這也不是很 "明顯",所以使用!來檢查某些東西是否被定義或存在,真的會引起問題和意外的結果。我建議不要這樣做,除非你真的真的知道你在做什么以及為什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322434.html
標籤:
下一篇:以多維陣列作為形式引數的函式
