本篇文章帶給大家的內容是關於JavaScript中的arguments物件如何使用? (用法介紹),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
arguments 是一個類似陣列的物件, 對應於傳遞給函數的參數。
語法
arguments
描述
#arguments物件是所有函數中可用的局部變數。你可以使用arguments物件在函數中引用函數的參數。此物件包含傳遞給函數的每個參數的條目,第一個條目的索引從0開始。例如,如果一個函數傳遞了三個參數,你可以參考它們如下:
arguments[0] arguments[1] arguments[2]
參數也可以被設定:
arguments[1] = 'new value';
arguments物件不是一個 Array 。它類似於數組,但除了 長度之外沒有任何數組屬性。例如,它沒有 pop 方法。但是它可以被轉換為一個真正的陣列::
let args = Array.prototype.slice.call(arguments); let args = [].slice.call(arguments);
你也可以使用Array.from()方法或spread 運算子將arguments 轉換為真正的陣列:
let args = Array.from(arguments); let args = [...arguments];
對參數使用slice會阻止某些JavaScript引擎中的最佳化(例如V8 引擎)。
如果你關心它們,試著透過遍歷arguments物件來建構一個新的陣列。
另一種方法是使用被忽視的/鄙視/輕視,/看不起Array構造函數作為一個函數:
let args = ( arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) );
如果Array generics 可用的話,下面的程式碼可以作為替代
var args = Array.slice(arguments);
arguments 物件僅在函數內部有效,在函數外部呼叫arguments 物件會出現一個錯誤。
arguments的typeof回傳'object'。
console.log(typeof arguments); // 'object'
#可以使用索引來決定各個arguments的型別。
console.log(typeof arguments[0]); //这将返回单个参数的typeof。
如果你呼叫一個函數,當這個函數的參數數量比它明確宣告的參數數量更多的時候,你就可以使用 arguments 物件。這個技術對於參數數量是一個可變數的函數來說比較有用。你可以用 arguments.length 來得到參數的數量,然後可以用 arguments object 來處理每個參數。 (想要得到函數簽章的參數數, 請使用Function.length 屬性。)
#屬性
arguments.callee // 指向当前执行的函数。 arguments.caller // 指向调用当前函数的函数。 arguments.length // 指向传递给当前函数的参数数量。
範例
定義一個連接幾個字串的函數
這個範例定義了一個函數來連接字串。這個函數唯一正式宣告了的參數是一個字串,該參數指定一個字元作為銜接點來連接字串。這個函數定義如下:
function myConcat(separator) { var args = Array.prototype.slice.call(arguments, 1); return args.join(separator); }
你可以將任意數量的參數傳遞到該函數,然後該函數會將每個參數作為一個條目來建立一個清單。
myConcat(", ", "red", "orange", "blue"); // returns "red, orange, blue" myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); // returns "elephant; giraffe; lion; cheetah" myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley"); // returns "sage. basil. oregano. pepper. parsley"
定義一個建立HTML清單的方法
這個範例定義了一個函數透過一個字串來建立HTML清單。這個函數唯一正式聲明了的參數是一個字元。當此參數為 "u" 時,建立一個無序列表 (項目清單);當該參數為 "o" 時,則建立一個有序清單 (編號清單)。該函數定義如下:
function list(type) { var result = "<" + type + "l><li>"; var args = Array.prototype.slice.call(arguments, 1); result += args.join("</li><li>"); result += "</li></" + type + "l>"; // end list return result; }
你可以將任意數量的參數傳遞到該函數,然後該函數會將每個參數作為一個條目添加到第一個參數指定類型的列表當中。
var listHTML = list("u", "One", "Two", "Three"); /* listHTML is: "<ul><li>One</li><li>Two</li><li>Three</li></ul>" */
注意
ES6中的箭頭函數沒有自己的arguments
對象,不過在大多數情形下,rest
參數可以給一個解決方案:
let a; const fn = (...rest) => Array.prototype.slice.call(rest, 1); a = fn(1, 2); // [2]
以上是JavaScript中的arguments物件如何使用? (用法介紹)的詳細內容。更多資訊請關注PHP中文網其他相關文章!