如何在JavaScript函数中对每个参数执行某些操作?

时间:2012-12-05 21:34:39

标签: javascript

鉴于此功能:

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

如何为每个参数使用console.log()?我知道你可以通过使用arguments关键字来查看参数。参数似乎返回看起来像Array的东西(但是类型为“object”[suprise .. not])但它不支持.forEach,我使用的是Chrome。

我尝试将功能修改为此功能,并期望它能够正常工作:

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

你得到的错误是TypeError:Object#没有方法'forEach'。

7 个答案:

答案 0 :(得分:5)

arguments对象没有forEach方法,因此您需要使用for循环或for...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

答案 1 :(得分:3)

或者你可以使用hack:

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

arguments不是一个数组,但它足够接近你可以应用Array的原型并使用常规数组函数。我们只是抓住Array的实现并将它强有力地应用于参数。

答案 2 :(得分:2)

来自MDN

// convert to array
var args = Array.prototype.slice.call(arguments);
args.forEach...

答案 3 :(得分:1)

arguments.length上执行循环。 arguments不是数组,因此它没有forEach原型方法。

for ( var i = 0, l = arguments.length; i<l; ++i ) {
  doSomething( arguments[i] );
}

答案 4 :(得分: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 );
    });
}

答案 5 :(得分:0)

var show_args = function (){

    for(var ar in arguments){
        console.log(arguments[ar])
    }
}

答案 6 :(得分:0)

您可以通过调用数组切片方法将“arguments”转换为数组:

function foo(a, b, c) {
  var argArray = Array.prototype.slice.call(arguments);
  argArray.forEach(function(x) {
    // ...
  });
}