
- Javascript 基礎教程
- Javascript – 首頁
- JavaScript – 路線圖
- JavaScript – 概述
- JavaScript – 特性
- JavaScript – 啟用
- JavaScript – 位置
- JavaScript – 語法
- JavaScript – Hello World
- JavaScript – Console.log()
- JavaScript – 註釋
- JavaScript – 變數
- JavaScript – let 語句
- JavaScript – 常量
- JavaScript – 資料型別
- JavaScript – 型別轉換
- JavaScript – 嚴格模式
- JavaScript – 保留關鍵字
- JavaScript 運算子
- JavaScript – 運算子
- JavaScript – 算術運算子
- JavaScript – 比較運算子
- JavaScript – 邏輯運算子
- JavaScript – 位運算子
- JavaScript – 賦值運算子
- JavaScript – 條件運算子
- JavaScript – typeof 運算子
- JavaScript – 空值合併運算子
- JavaScript – delete 運算子
- JavaScript – 逗號運算子
- JavaScript – 分組運算子
- JavaScript – yield 運算子
- JavaScript – 展開運算子
- JavaScript – 指數運算子
- JavaScript – 運算子優先順序
- JavaScript 控制流
- JavaScript – if...else
- JavaScript – while 迴圈
- JavaScript – for 迴圈
- JavaScript – for...in
- Javascript – for...of
- JavaScript – 迴圈控制
- JavaScript – break 語句
- JavaScript – continue 語句
- JavaScript – switch case
- JavaScript – 使用者定義迭代器
- JavaScript 函式
- JavaScript – 函式
- JavaScript – 函式表示式
- JavaScript – 函式引數
- JavaScript – 預設引數
- JavaScript – Function() 建構函式
- JavaScript – 函式提升
- JavaScript – 自執行函式
- JavaScript – 箭頭函式
- JavaScript – 函式呼叫
- JavaScript – Function call()
- JavaScript – Function apply()
- JavaScript – Function bind()
- JavaScript – 閉包
- JavaScript – 變數作用域
- JavaScript – 全域性變數
- JavaScript – 智慧函式引數
- JavaScript 物件
- JavaScript – Number
- JavaScript – Boolean
- JavaScript – String
- JavaScript – Array
- JavaScript – Date
- JavaScript – DataView
- JavaScript – Handler
- JavaScript – Math
- JavaScript – RegExp
- JavaScript – Symbol
- JavaScript – Set
- JavaScript – WeakSet
- JavaScript – Map
- JavaScript – WeakMap
- JavaScript – 可迭代物件
- JavaScript – Reflect
- JavaScript – TypedArray
- JavaScript – 模板字面量
- JavaScript – 標記模板
- 面向物件的 JavaScript
- JavaScript – 物件
- JavaScript – 類
- JavaScript – 物件屬性
- JavaScript – 物件方法
- JavaScript – 靜態方法
- JavaScript – 顯示物件
- JavaScript – 物件訪問器
- JavaScript – 物件建構函式
- JavaScript – 原生原型
- JavaScript – ES5 物件方法
- JavaScript – 封裝
- JavaScript – 繼承
- JavaScript – 抽象
- JavaScript – 多型
- JavaScript – 解構賦值
- JavaScript – 物件解構
- JavaScript – 陣列解構
- JavaScript – 巢狀解構
- JavaScript – 可選鏈
- JavaScript – 全域性物件
- JavaScript – Mixins
- JavaScript – 代理 (Proxies)
- JavaScript 版本
- JavaScript – 歷史
- JavaScript – 版本
- JavaScript – ES5
- JavaScript – ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 非同步程式設計
- JavaScript – 非同步程式設計
- JavaScript – 回撥函式
- JavaScript – Promise
- JavaScript – Async/Await
- JavaScript – 微任務
- JavaScript – Promisification (Promise 化)
- JavaScript – Promise 鏈式呼叫
- JavaScript – 定時事件
- JavaScript – setTimeout()
- JavaScript – setInterval()
- JavaScript Cookie
- JavaScript – Cookie
- JavaScript – Cookie 屬性
- JavaScript – 刪除 Cookie
- JavaScript 瀏覽器 BOM
- JavaScript – 瀏覽器物件模型
- JavaScript – Window 物件
- JavaScript – Document 物件
- JavaScript – Screen 物件
- JavaScript – History 物件
- JavaScript – Navigator 物件
- JavaScript – Location 物件
- JavaScript – Console 物件
- JavaScript Web API
- JavaScript – Web API
- JavaScript – History API
- JavaScript – Storage API
- JavaScript – Forms API
- JavaScript – Worker API
- JavaScript – Fetch API
- JavaScript – Geolocation API
- JavaScript 事件
- JavaScript – 事件
- JavaScript – DOM 事件
- JavaScript – addEventListener()
- JavaScript – 滑鼠事件
- JavaScript – 鍵盤事件
- JavaScript – 表單事件
- JavaScript – Window/Document 事件
- JavaScript – 事件委託
- JavaScript – 事件冒泡
- JavaScript – 事件捕獲
- JavaScript – 自定義事件
- JavaScript 錯誤處理
- JavaScript – 錯誤處理
- JavaScript – try...catch
- JavaScript – 除錯
- JavaScript – 自定義錯誤
- JavaScript – 擴充套件錯誤
- JavaScript 重要關鍵字
- JavaScript – this 關鍵字
- JavaScript – void 關鍵字
- JavaScript – new 關鍵字
- JavaScript – var 關鍵字
- JavaScript HTML DOM
- JavaScript – HTML DOM
- JavaScript – DOM 方法和屬性
- JavaScript – DOM Document
- JavaScript – DOM 元素
- JavaScript – DOM 屬性 (Attr)
- JavaScript – DOM 表單
- JavaScript – 更改 HTML
- JavaScript – 更改 CSS
- JavaScript – DOM 動畫
- JavaScript – DOM 導航
- JavaScript – DOM 集合
- JavaScript – DOM NodeList
- JavaScript – DOM DOMTokenList
- JavaScript 其他
- JavaScript – Ajax
- JavaScript – 非同步迭代
- JavaScript – Atomics 物件
- JavaScript – 其餘引數
- JavaScript – 頁面重定向
- JavaScript – 對話方塊
- JavaScript – 頁面列印
- JavaScript – 驗證
- JavaScript – 動畫
- JavaScript – 多媒體
- JavaScript – 圖片地圖
- JavaScript – 瀏覽器
- JavaScript – JSON
- JavaScript – 多行字串
- JavaScript – 日期格式
- JavaScript – 獲取日期方法
- JavaScript – 設定日期方法
- JavaScript – 模組
- JavaScript – 動態匯入
- JavaScript – BigInt
- JavaScript – Blob
- JavaScript – Unicode
- JavaScript – 淺複製
- JavaScript – 呼叫棧
- JavaScript – 引用型別
- JavaScript – IndexedDB
- JavaScript – 點選劫持攻擊
- JavaScript – 柯里化
- JavaScript – 圖形
- JavaScript – Canvas
- JavaScript – 防抖
- JavaScript – 效能
- JavaScript – 樣式指南
JavaScript – 其餘引數
其餘引數
JavaScript 中的其餘引數允許函式以陣列的形式接受可變數量的引數。當需要傳遞給函式的引數數量不固定時,可以使用其餘引數。
JavaScript 其餘引數允許您將所有剩餘的引數收集到單個數組中。其餘引數由三個點 (...) 後跟引數名稱表示。此引數名稱是包含所有剩餘引數的陣列。
其餘引數語法
JavaScript 中的其餘引數涉及在函式宣告中使用三個點 (...) 後跟引數名稱。
function functionName(para1, para2, ...theArgs){ // function body; }
這裡para1 和 para2 是普通引數,而 theArgs 是其餘引數。其餘引數收集其餘引數(此處,除對應於引數 para1 和 para1 的引數之外的引數),並將其賦值給名為 theArgs 的陣列。
我們也可以在函式表示式中編寫其餘引數,與函式宣告相同。
其餘引數應始終是函式定義中的最後一個引數。
function funcName(...para1, para2, para2){} // SyntaxError: Invalid or unexpected token
函式定義只能有一個其餘引數。
function funcName(para1, ...para2, ...para3){} //SyntaxError: Rest parameter must be last formal parameter
示例:可變長度引數列表
當您想要定義一個可以處理可變數量引數的函式時,其餘引數非常有用。讓我們來看下面的例子:
<html> <body> <div> Rest parameter allows function to accept nay number of arguments.</div> <div id = "demo"> </div> <script> function sum(...nums) { let totalSum = 0; for (let num of nums) { totalSum += num; } return totalSum; } document.getElementById("demo").innerHTML = sum(10, 20, 30, 40) + "<br>" + sum(10, 20) + "<br>" + sum(); </script> </body> </html>
輸出
Rest parameter allows function to accept nay number of arguments. 100 30 0
這裡,其餘引數 nums 允許函式接受任意數量的數字引數。
示例:查詢最大數
JavaScript 其餘引數簡化了在給定的一組數字中查詢最大數的過程。
在這個例子中,我們使用其餘引數 numbers 來收集傳遞給函式的所有引數。展開運算子用於將各個值傳遞給 Math.max() 函式。
<html> <body> <div> Finding the maximum number</div> <div id = "demo"> </div> <script> function getMax(...args){ return Math.max(...args); } document.getElementById("demo").innerHTML = getMax(10,20,30,40) + "<br>" + getMax(10,20,30); </script> </body> </html>
輸出
Finding the maximum number 40 30
這裡其餘引數 args 允許函式 getMax 接受任意數量的引數。
展開運算子和其餘引數
展開運算子 (...) 與其餘引數密切相關,並且經常與它們一起使用。其餘引數將函式引數收集到陣列中,而展開運算子執行相反的操作,將陣列的元素展開為單個引數。
在上面查詢最大數的示例中,我們使用了其餘引數和展開運算子。
function getMax(...args){ // here ...args as rest parameter return Math.max(...args); // here ... works as spread operator }
示例
在這個例子中,展開運算子 ... 用於將 numbers 陣列的元素作為單個引數傳遞給 multiply 函式。
<html> <body> <div> Spread operator in JavaScript<div> <div id="demo"></div> <script> function multiply(a, b, c) { return a * b * c; } const numbers = [2, 3, 4]; document.getElementById("demo").innerHTML = multiply(...numbers); </script> </body> </html>
輸出
Spread operator in JavaScript 24
其餘引數與 arguments 物件
其餘引數的引入對我們如何處理可變長度引數列表(與使用 arguments 物件相比)具有影響。讓我們比較這兩種方法
其餘引數
<html> <body> <div> Sum using rest parameter in JavaScript:</div> <div id = "demo"> </div> <script> function sum(...numbers) { return numbers.reduce((total, num) => total + num, 0); } document.getElementById("demo").innerHTML = sum(1, 2, 3, 4, 5); </script> </body> </html>
輸出
Sum using rest parameter in JavaScript: 15
arguments 物件
<html> <body> <div> Sum using arguments object in JavaScript:</div> <div id = "demo"> </div> <script> function sum() { const argsArray = Array.from(arguments); return argsArray.reduce((total, num) => total + num, 0); } document.getElementById("demo").innerHTML = sum(1, 2, 3, 4, 5); </script> </body> </html>
輸出
Sum using arguments object in JavaScript: 15
雖然這兩種方法都達到了相同的結果,但其餘引數語法更簡潔易讀。它也與其他現代 JavaScript 功能更一致。
使用其餘引數進行解構
解構賦值是在 ES6 中引入的。它允許我們訪問陣列的各個值,而無需使用陣列索引。我們可以使用解構賦值從其餘引數建立的陣列中提取值。
示例
在下面的示例中,解構賦值從 numbers 陣列中提取前兩個元素。
<html> <body> <div> Destructuring assignment with rest parameter</div> <div id = "demo"> </div> <script> function getFirstTwo(...numbers) { const [first, second] = numbers; return `First: ${first}, Second: ${second}`; } document.getElementById("demo").innerHTML = getFirstTwo(1, 2, 3, 4, 5); </script> </body> </html>
輸出
Destructuring assignment with rest parameter First: 1, Second: 2