0

この関数を考えると:

function foo( a,b,c ) {
    //
}

各引数に console.log() を使用するなど、どうすればよいでしょうか? 引数キーワードを使用して引数を表示できることは知っています。引数は配列のように見えるものを返すようです(ただし、タイプは「オブジェクト」です[驚き..ではない])が、.forEachをサポートしていません。私はChromeを使用しています。

関数をこれに変更してみましたが、動作すると予想されました。

function foo( a,b,c ) {
    arguments.forEach(function( arg ){
        console.log( arg );
    });
}

TypeError: Object # has no method 'forEach' というエラーが表示されます。

4

7 に答える 7

5

オブジェクトにはメソッドargumentsがないため、ループまたはループでforEach反復処理する必要があります。forfor...in

​function foo () {
    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);    
    }
}

foo("Foo", { "bar": 0 }); // Output: Foo, Object {bar: 0} 

または

​function foo () {
    for (var arg in arguments) {
        console.log(arguments[arg]); 
    }    
}

foo("Foo", "Bar"); // Output: Foo, Bar
于 2012-12-05T21:36:15.360 に答える
3

または、ハックを使用できます。

Array.prototype.forEach.call(arguments, function (arg) {
    console.log(arg);
});

argumentsは配列ではありませんが、配列のプロトタイプを適用して通常の配列関数を使用できるほど十分に近いものです。Array の実装を取得して、強制的に引数に適用しているだけです。

于 2012-12-05T21:38:55.257 に答える
2

MDNから:

// convert to array
var args = Array.prototype.slice.call(arguments);
args.forEach...
于 2012-12-05T21:37:36.657 に答える
1

通常のforループを使用するだけです。

function foo( a,b,c ) {
    for(var i = 0, len = arguments.length; i < len; i++){
        console.log(arguments[i]);
    }
}

または、実数配列に変換できます。

function foo( a,b,c ) {
    var args = Array.prototype.slice.call(arguments);
    args.forEach(function( arg ){
        console.log( arg );
    });
}
于 2012-12-05T21:36:42.833 に答える
1

でループを実行しarguments.lengthます。argumentsは配列ではないため、forEachプロトタイプのメソッドはありません。

for ( var i = 0, l = arguments.length; i<l; ++i ) {
  doSomething( arguments[i] );
}
于 2012-12-05T21:36:13.640 に答える
0
var show_args = function (){

    for(var ar in arguments){
        console.log(arguments[ar])
    }
}
于 2012-12-05T21:37:05.793 に答える
0

配列スライスメソッドを呼び出すことで、「引数」を配列に変換できます。

function foo(a, b, c) {
  var argArray = Array.prototype.slice.call(arguments);
  argArray.forEach(function(x) {
    // ...
  });
}
于 2012-12-05T21:37:36.433 に答える