我不明白爲什麼arguments
是一個類似於JS的數組函數?如何找到length
物業arguments
?爲什麼`arguments`在JS函數中是一個數組?
爲什麼Object.keys(arguments)
無法輸出length
屬性?
我不明白爲什麼arguments
是一個類似於JS的數組函數?如何找到length
物業arguments
?爲什麼`arguments`在JS函數中是一個數組?
爲什麼Object.keys(arguments)
無法輸出length
屬性?
arguments
是類似數組在JavaScript中的幾個原因,如允許不類型安全,你可以有靈活性,並能夠使「過載」 - 不是真正的重載,但是你可以讓相同的函數作爲一個getter和setter,例如,因爲無論如何你都不能在js中有一個超載。
舉個例子如下:
var theName;
function name() {
if (arguments.length > 0) {
theName = arguments[0];
} else {
return theName;
}
};
,你可以看到,同樣的功能就可以在你的代碼服務於幾個不同的功能(當然要謹慎地使用這一點 - 而是採取例如$();
又名jQuery()
功能jQuery的 - 它確實相當多的不同的東西看多它here在互聯網主食$.ajax()
同樣的事情看得更上here
,如果它不是一個類似數組的對象,你會得到。來自p的錯誤分析比函數簽名所需的參數更多或更少的參數。這並不意味着如果函數中缺少參數,則不會拋出錯誤 - 但它使您可以靈活地使用可選參數,或者在同一函數中傳遞數組或字符串以添加或增加目的,或者代碼的結果。 - 它允許使JavaScript如此靈活的許多事情(例如Function.prototype.apply()
)。
簡而言之,它是數組的原因對JavaScript的工作方式以及它爲什麼如此靈活的基本原則。
此外,argument
對象如何工作就像一個數組(如此按索引訪問,即arguments[0]
),它具有length
屬性。
編輯:
我看見你還問爲什麼Object.keys(參數)不起作用 - 這是因爲參數是一種特殊的對象,它不是這樣的長度屬性是基於不同參數對象而不是標準數組或JS對象。 - 您需要將參數複製到數組中,通過索引訪問它,或者使用列出的方法之一here。
試試看,你會得到它:
$ js
> !function(){console.log(arguments.length);}(1,2,3)
3
Also:
>!function(){ console.log(Object.keys(arguments).length); }(1,2,3)
3
我不明白爲什麼參數是一個數組在JS函數?
因爲規格說明如此。 From this spec ref here:
當控制進入用於功能代碼的執行上下文,一個 參數對象除非創建(如在10指定。5) 標識符參數作爲函數的 FormalParameterList中的標識符出現,或作爲 函數中包含的變量聲明或函數聲明的標識符出現。
您可以檢查,這是一個對象(陣列等),而不是實際的陣列通過測試出來是這樣的:
function test(param1, param2) {
document.getElementById("result").innerText += arguments instanceof Array;
document.getElementById("result").innerText += arguments instanceof Object;
document.getElementById("result").innerText += arguments.length;
}
test("str1", "str2");
<p id="result"></p>
我怎麼能找到參數中的長度屬性?
使用length
如在arguments.length
中那樣。
。
arguments.length獲取參數的數量..! – 2014-11-24 05:41:35
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments – 2014-11-24 05:44:01