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]);
}
_
それはlike配列ですが、配列ではありません。実際、あまりにも奇妙なので、実際にはあまり使用しないでください。一般的な方法は、その値をreal配列に入れることです。
_function foo() {
var args = Array.prototype.slice.call(arguments, 0);
// ...
_
その例では、「args」は通常の配列であり、奇妙な要素はありません。 「引数」にはあらゆる厄介な問題があり、ECMAScript 5ではその機能が制限されます。
edit— .slice()
関数を使用すると確実に便利ですが、arguments
オブジェクトを関数は最適化の問題を引き起こすため、それを実行する関数はまったく最適化されない場合があります。したがって、arguments
を配列に変換する簡単で簡単な方法は、
_function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}
_
ECMAScript 2015(またはES6)以降、 restパラメーター へのアクセスが可能になり、引数を管理するためのややクリーンな方法が提供されます。
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に変換されます。
ECMAScript 6では、残りの引数構文を使用できます。
const testArray = (...args) => {
console.log(args);
};
testArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
function toArray() {
return arguments;
}
var myargs = toArray(1, 2, 3, 4, 5, 6);
arguments
キーワードは、すべてのjs関数で使用できます
var arr = [];
function testArray() {
Array.prototype.Push.apply(arr, arguments);
}
いくつかのレガシーな方法がありますが、私はES6
以降のバージョンなので、これを実装したい場合は、以下のように記述します。
const func = ...arg => console.log(arg);
シンプルで最先端のテクノロジー。
また、単に「キャスト」して、醜いループを回避することもできます。
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 ]
JavaScript ES5
function testArray(){
for(index = 0; index < arguments.length; i++) {
alert(arguments[index])
}
}
JavaScript ES6
const testArray = (...arg) => console.log(arg)