PHPには func_num_args
と func_get_args
がありますが、JavaScriptに似たようなものはありますか?
arguments
を使用します。配列のようにアクセスできます。引数の数にarguments.length
を使用します。
argumentsは 配列のようなオブジェクト (実際の配列ではありません)です。関数の例...
function testArguments () // <-- notice no arguments specified
{
console.log(arguments); // outputs the arguments to the console
var htmlOutput = "";
for (var i=0; i < arguments.length; i++) {
htmlOutput += '<li>' + arguments[i] + '</li>';
}
document.write('<ul>' + htmlOutput + '</ul>');
}
やってみよう...
testArguments("This", "is", "a", "test"); // outputs ["This","is","a","test"]
testArguments(1,2,3,4,5,6,7,8,9); // outputs [1,2,3,4,5,6,7,8,9]
詳細情報: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments
ES6では、次のような「...」表記で関数の引数を指定する構成が可能です
function testArgs (...args) {
// Where you can test picking the first element
console.log(args[0]);
}
arguments
オブジェクトは、関数の引数が格納される場所です。
Argumentsオブジェクトは機能し、配列のように見えますが、基本的には、配列のメソッドはありません。たとえば、
Array.forEach(callback[, thisArg]);
Array.map(callback[, thisArg])
Array.filter(callback[, thisArg]);
Array.indexOf(searchElement[, fromIndex])
arguments
オブジェクトをreal配列に変換する最良の方法は次のようだと思います:
argumentsArray = [].slice.apply(arguments);
これで配列になります。
再利用可能:
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
(function() {
args = ArgumentsToArray(arguments);
args.forEach(function(value) {
console.log('value ===', value);
});
})('name', 1, {}, 'two', 3)
結果:
>
value === name
>value === 1
>value === Object {}
>value === two
>value === 3
必要に応じて、配列に変換することもできます。配列ジェネリックが利用可能な場合:
var args = Array.slice(arguments)
さもないと:
var args = Array.prototype.slice.call(arguments);
from Mozilla MDN :
JavaScriptエンジン(V8など)の最適化を妨げるため、引数をスライスしないでください。
他の多くの人が指摘したように、arguments
には、関数に渡されるすべての引数が含まれています。
同じ引数を使用して別の関数を呼び出す場合は、apply
を使用します
例:
var is_debug = true;
var debug = function() {
if (is_debug) {
console.log.apply(console, arguments);
}
}
debug("message", "another argument")
はい、関数宣言時にいくつの引数が可能なのかわからない場合は、パラメーターなしで関数を宣言し、関数呼び出し時に渡される引数配列ですべての変数にアクセスできます。
Gunnarへの同様の答え、より完全な例:透過的にすべてを返すことさえできます:
function dumpArguments(...args) {
for (var i = 0; i < args.length; i++)
console.log(args[i]);
return args;
}
dumpArguments("foo", "bar", true, 42, ["yes", "no"], { 'banana': true });
出力:
foo
bar
true
42
["yes","no"]
{"banana":true}
ES6では、次のようなことができます。
function foo(...args)
{
let [a,b,...c] = args;
console.log(a,b,c);
}
foo(1, null,"x",true, undefined);