鉴于此功能:
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'。
答案 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) {
// ...
});
}