Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理JavaScript函数中的每个参数?_Javascript - Fatal编程技术网

如何处理JavaScript函数中的每个参数?

如何处理JavaScript函数中的每个参数?,javascript,Javascript,鉴于此功能: function foo( a,b,c ) { // } 如何做一些事情,比如对每个参数使用console.log?我知道您可以使用arguments关键字查看参数。参数似乎返回看起来像数组但类型为object[Supruse..not]但不支持的内容。forEach,我使用的是Chrome 我尝试将函数修改为此,并希望它能够工作: function foo( a,b,c ) { arguments.forEach(function( arg ){

鉴于此功能:

function foo( a,b,c ) {
    //
}
如何做一些事情,比如对每个参数使用console.log?我知道您可以使用arguments关键字查看参数。参数似乎返回看起来像数组但类型为object[Supruse..not]但不支持的内容。forEach,我使用的是Chrome

我尝试将函数修改为此,并希望它能够工作:

function foo( a,b,c ) {
    arguments.forEach(function( arg ){
        console.log( arg );
    });
}
您得到的错误是TypeError:Object没有方法“forEach”。

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

for ( var i = 0, l = arguments.length; i<l; ++i ) {
  doSomething( arguments[i] );
}
arguments对象没有forEach方法,因此需要使用for循环或for…in循环对其进行迭代

只需使用普通for循环


可以通过调用数组切片方法将参数转换为数组:

函数fooa、b、c{ var argArray=Array.prototype.slice.callarguments; argArray.forEachfunctionx{ // ... }; } 发件人:

或者你可以使用黑客:

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

参数不是数组,但它足够接近,可以应用数组的原型并使用常规数组函数。我们只是抓取数组的实现并将其强制应用于参数。

不会使用for..in on参数也会迭代长度、被调用方和其他属性?@RocketHazmat No。长度属性不可枚举。上面示例中的长度描述符是{value:2,writable:true,enumerable:false,configurable:true}。在第二个示例中,为什么需要参数[arg]?为什么你不能直接用console.logarg?我明白了,我以前有过一次输入错误,arg关键字是一个索引。@CaleyWoods因为“arg”代表一个键,而不是一个值。因此,我们必须再次将该键传递给arguments对象,以获得相应的值。Jonathan Sampson-我接受了你的答案,因为我觉得它正好回答了我提出的问题。它没有解决我的下一个问题,这不是你的错,但其他一些答案确实说明了使用Array.prototype.forEach.call,它回答了我的下一个问题:如何使参数响应forEach?。我相信您的for…in解决方案比调用forEach更具可读性。这与我一直在寻找的内容一致。关于使用常规for循环的答案是很好的答案,但它让我想到了一个问题,如果参数对forEach没有响应,我如何使它这样做?。这个答案回答了我还没有问过的问题。话虽如此,这是每个函数都需要做的事情,还是我可以永久性地将arguments对象转换成一个数组,而不是说我想,只是好奇@CaleyWoods不,你不能永久这么做,你必须为每个函数都这么做。在同一秒提交了相同的解决方案。。。不可能的这一定是量子世界中的一种奇怪的东西。@phant0m,正常世界中也存在着低垂的果实@bzlm我对时间比对内容更为惊讶;这又是我的目标。我对phant0ms的答案做了解释。如果您只想记录它,您可以将其进一步简化为Array.prototype.forEach.callarguments、console.log、console,但我怀疑您的目的是什么。tjameson这是正确的。我有另一个功能,我正在寻找调用,只是想要一个干净的方式来做这件事,并避免:someFna;someFnb;
​function foo () {
    for (var arg in arguments) {
        console.log(arguments[arg]); 
    }    
}

foo("Foo", "Bar"); // Output: Foo, Bar
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 );
    });
}
var show_args = function (){

    for(var ar in arguments){
        console.log(arguments[ar])
    }
}
// convert to array
var args = Array.prototype.slice.call(arguments);
args.forEach...
Array.prototype.forEach.call(arguments, function (arg) {
    console.log(arg);
});