JavaScript函數可以帶來無限制的參數嗎? 事情是這樣的:JavaScript函數中的無限參數
testArray(1, 2, 3, 4, 5...);
我想:
var arr = [];
function testArray(A) {
arr.push(A);
}
但這不起作用(產量只有第一個參數)。或者,唯一的辦法就是:
function testArray(a, b, c, d, e...) {
}
感謝
JavaScript函數可以帶來無限制的參數嗎? 事情是這樣的:JavaScript函數中的無限參數
testArray(1, 2, 3, 4, 5...);
我想:
var arr = [];
function testArray(A) {
arr.push(A);
}
但這不起作用(產量只有第一個參數)。或者,唯一的辦法就是:
function testArray(a, b, c, d, e...) {
}
感謝
有一個奇怪的「魔術」變量,你可以參考所謂「論據」:
function manyArgs() {
for (var i = 0; i < arguments.length; ++i)
alert(arguments[i]);
}
這像一個數組,但它不是數組。實際上它太奇怪了,你根本不應該使用它。通常的做法是得到它的值轉換成一個真正的陣列:
function foo() {
var args = Array.prototype.slice.call(arguments, 0);
// ...
在這個例子中,「ARGS」將是一個正常的數組,沒有任何古怪的。 「爭論」有各種令人討厭的問題,並且在ECMAScript 5中它的功能將會被削減。
編輯 —雖然使用.slice()
功能肯定是方便的,事實證明,經過arguments
對象出了功能會導致優化頭痛,以至於那些它可能無法在所有得到優化功能。因此把arguments
成陣列的簡單,直接的方式是
function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}
function toArray() {
return arguments;
}
var myargs = toArray(1, 2, 3, 4, 5, 6);
的arguments
關鍵字是在每一個js函數
'arguments'不是「type」'Array ',它只是一種「可迭代的」,這在JS方面是相當蹩腳的。 –
var arr = [];
function testArray() {
Array.prototype.push.apply(arr, arguments);
}
作爲ECMAScript的2015的可用的(或ES6),我們也有權訪問rest parameters,這給我們一個稍微乾淨的方式來管理參數:
function foo(a, b, ...others) {
console.log("a and b are ", a, b);
for (let val of others) {
console.log(val);
}
}
foo(1, 2, 3, 4, 5);
在撰寫本文時,Chrome 47 +,Firefox 15+和Edge支持此功能。該功能也可以通過Babel和TypeScript轉換到ES5。
謝謝,這正是我一直在尋找的。特別是MDN鏈接,我只是不記得它的名字。 :) – Noitidart
的ECMAScript 6,您可以使用其他參數的語法:
const testArray = (...args) => {
console.log(args);
};
testArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
你也可以只是「投」了,節約了您的醜循環:
var getArguments = function() {
return arguments;
};
var foo = getArguments(1,2,3,4);
// console.log(foo.slice()); => TypeError: foo.slice is not a function
var foo = Object.values(foo);
console.log(foo); // => [ 1, 2, 3, 4 ]
foo.push(5);
console.log(foo); // => [ 1, 2, 3, 4, 5 ]
作爲替代方案,你可以有一個參數 - 「無限」容器,如數組(或對象),然後只是將所有數據都作爲數組傳遞,即使只有'...([one_arg])'... –
請注意,要直接回答問題, [不,你不能。](http:// stackoverflow。com/questions/22747068/is-there-a-max-of-arguments-javascript-functions-can-accept) – Kaiido