輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
JavaScript函式具有像陣列一樣的物件,這些物件稱為arguments,與傳遞給函式的引數相對應。傳遞給JavaScript函式的所有引數都可以使用arguments物件來引用。
現在我們開始學習,仔細看下面列出的程式碼:
function add(num1, num2) { var res = num1 + num2; return res; } var r = add(7, 8); console.log(r);
在上面的函式中,num1和num2是兩個引數。你可以使用名為num1和num2的arguments來引用這些引數。除了arguments名稱之外,你還可以使用JavaScript陣列,如物件arguments來引用它們。所以,上面的函式可以重寫,如下所示:
function add(num1, num2) { var res = arguments[0] + arguments[1]; return res; } var r = add(7, 8); console.log(r);
在JavaScript函式中,arguments物件用於訪問或引用傳遞給函式的所有引數。arguments物件是可用於函式的區域性變數。arguments物件的長度相當於傳遞給函式的arguments數量。請看下面的程式碼,作為輸出將得到2,因為有兩個arguments傳遞給函式:
function add(num1, num2) { var res = arguments.length; return res; } var r = add(7, 8); console.log(r);
arguments物件不是純陣列
JavaScript的arguments物件不是純粹的JavaScript陣列。你不能對arguments物件執行諸如push,pop,slice等操作。正如你將在下面列出的程式碼中所看到的那樣,執行push操作會引發異常,因為arguments.push不是函式。
function add(num1, num2) { arguments.push(78); var res = num1 + num2; return res; }
可以設定arguments物件
你可以在arguments物件陣列中設定特定的項。首先,你可以使用索引0設定陣列的第一個項,如下所示:
function add(num1, num2) { arguments[0] = 15; var res = num1 + num2; return res; } var r = add(7, 8); console.log(r);
在add函式中,num1和arguments[0]引用相同的值。所以,當你更新arguments[0]時,num1的值也會被更新。對於上面的程式碼,輸出將是23。
將arguments物件轉換為陣列
正如我們在這篇文章中介紹的那樣,JavaScript函式arguments物件不是純陣列。除了長度屬性外,它沒有任何其他屬性。但是,你可以使用Array.prototype.slice.call將arguments物件轉換為陣列,如下所示:
function add(num1, num2) { var arg = Array.prototype.slice.call(arguments); console.log(arg.pop()); }
在ECMAScript 6中,你可以將arguments物件轉換為一個陣列,如下所示:
function add(num1, num2) { var arg = Array.from(arguments); console.log(arg.pop()); }
結論
總而言之,關於arguments物件需要謹記的一些重要事情有:
- arguments物件的長度等於傳遞給函式的引數的數量。
- arguments物件是類似陣列的物件,但不是JavaScript陣列。
- 你不能對arguments物件使用其他JavaScript陣列方法,例如push,pop,slice等等。
- JavaScript arguments物件索引從零開始。所以第一個引數將被arguments[0]引用,第二個引數將被arguments[1]引用,等等。
簡單地說,JavaScript arguments物件是一個類似陣列的物件,它引用傳遞給函式的引數。在ECMAScript 6中,引入的rest引數現已被廣泛用來替代函式中的arguments物件用於變數數或引數。
在這個“輕鬆JavaScript”系列的下一篇文章中,我們將介紹JavaScript函式中的類。
系列目錄
輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句
輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數
輕鬆學習 JavaScript——第 3 部分:函式中的預設引數
輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件
輕鬆學習 JavaScript——第 5 部分:簡化函式提升
輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式
輕鬆學習 JavaScript——第 7 部分:物件屬性描述符
輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類
譯文連結:http://www.codeceo.com/article/easy-javascript-04-arguments.html
英文原文:Easy JavaScript Part 4: What Is the Arguments Object in a Function?
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 輕鬆學習 JavaScript (4):函式中的 arguments 物件JavaScript函式物件
- 輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式JavaScript函式
- 輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript——第 3 部分:函式中的預設引數JavaScript函式
- 輕鬆學習 JavaScript——第 5 部分:簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類JavaScript
- 輕鬆學習 JavaScript——第 7 部分:物件屬性描述符JavaScript物件
- 輕鬆學習 JavaScript (2):函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript(6):JavaScript 箭頭函式JavaScript函式
- 輕鬆學習 JavaScript (3):函式中的預設引數JavaScript函式
- 輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句JavaScript
- 輕鬆學習 JavaScript(5):簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript(8):JavaScript 中的類JavaScript
- 函式式JavaScript(3):.apply()、.call() 和arguments物件函式JavaScriptAPP物件
- 輕鬆學習 JavaScript(7):物件屬性描述符JavaScript物件
- js函式,arguments物件JS函式物件
- 怎麼輕鬆學習JavaScriptJavaScript
- JavaScript學習總結(四)function函式部分JavaScriptFunction函式
- 輕鬆理解建構函式和原型物件函式原型物件
- JavaScript之Arguments物件暫存函式引數與屬性JavaScript物件函式
- JavaScript arguments 物件JavaScript物件
- 學習筆記:javascript中的Generator函式筆記JavaScript函式
- 對JavaScript中函式物件的理解JavaScript函式物件
- 輕鬆學習 JavaScript(1):瞭解 let 語句JavaScript
- JavaScript學習4:BOM之window物件JavaScript物件
- JavaScript arguments物件詳解JavaScript物件
- JavaScript arguments 物件詳解JavaScript物件
- js-arguments 函式引數物件詳解JS函式物件
- 你知道 JavaScript 中的 Arguments 物件都有哪些用途嗎?JavaScript物件
- 輕鬆理解 Transformers (4) :Decoder 和 Output 部分ORM
- Javascript 物件導向中的建構函式和原型物件JavaScript物件函式原型
- 使用arguments物件獲取函式傳遞的引數物件函式
- 第4章函式函式
- JavaScript學習總結(二)陣列和物件部分JavaScript陣列物件
- JavaScript中argumentsJavaScript
- 輕鬆理解JS函式節流和函式防抖JS函式
- javascript生成map物件的函式JavaScript物件函式
- 輕鬆初探 Python 篇(六)— 函式Python函式