除了函式宣告和函式運算式之外,JavaScript 還有另一種非常簡潔的函式定義語法。 這類函式稱為_箭頭函式_。
以下是函式宣告與箭頭函式的比較。
function addUpTwoNumbers(num1, num2) {
return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
return num1 + num2;
};
如果函式主體只包含一個 return 敘述,就像上面的範例一樣,那麼 {} 和 return 關鍵字都可以省略。
如果只有一個參數,括號()也可以省略。
const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;
箭頭函式經常用來在函式呼叫中直接定義簡短的回呼函式。
applyToSquare(number => number * number);
陣列有內建的方法可以分析陣列的內容。
這些方法大多會接受一個回傳 true 或 false 的函式作為引數。
這樣的函式稱為predicate。
這些內建方法的用途是_取代for迴圈_或內建的 forEach 方法:
使用for迴圈進行分析的範例:
const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === 'two') {
return i;
}
}
// => 1
使用內建方法進行分析的範例:
const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1
以下列出一些其他可以用來分析陣列的實用內建方法。 完整的陣列方法列表請參閱 MDN。
includesincludes(value)方法會判斷陣列是否包含某個特定的值。
當陣列包含該值時會回傳 true,否則回傳 false。
const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false
everyevery(predicate)方法會接受一個函式,而這個函式就是_一個 predicate_。
它會測試陣列中的每個元素在傳入這個 predicate 之後是否都回傳 true。
換句話說,這個方法會測試它的所有元素是否都通過傳入這個函式呼叫的測試。
當每個元素都通過 predicate 測試時,它會回傳 true,否則回傳 false。
const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true
somesome(predicate)方法和 every 方法相同,但只要陣列中至少有一個元素通過_predicate_測試,就會回傳 true。
const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true
findfind(predicate)方法會回傳陣列中第一個通過predicate測試的元素的值。
some()在通過測試時會回傳 true,而find()則會回傳陣列中實際的值。
當陣列中沒有任何元素通過_predicate_測試時,這個方法會回傳 undefined。
const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1
findIndexfindIndex(predicate)和find()方法相同,但它回傳的是通過_predicate_測試的元素的(第一個)索引,而不是 value。
當陣列中沒有任何元素通過_predicate_測試時,這個方法會回傳 -1。
const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1
見習魔術師 Elyse 繼續她的訓練。她會拿到好幾疊牌,需要用來表演魔術。 為了讓事情簡單一些,她只使用 1 到 10 的牌。
在這道練習中,請使用內建方法來分析陣列的內容。
Elyse 想知道某張牌在牌堆中的位置(索引)。
const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3
Elyse 想知道某張牌是否在牌堆中,換句話說,牌堆裡是否包含特定的number。
const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true
Elyse 想知道每張牌是否都是偶數,換句話說,牌堆中的每個數字是否都是偶數number。
isEachCardEven([2, 4, 6, 7]);
// => false
Elyse 想知道牌堆中是否有奇數。
doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true
Elyse 想知道第一張奇數牌的值。
getFirstOddCard([4, 2, 8, 7, 9]);
// => 7
Elyse 想知道第一張偶數牌的位置。
getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1