JS arguments.forEach 不是函数

新手上路,请多包涵

所以这段代码完美运行

var arr = [1, 2, 3, 4];
arr.forEach(function (el) {
    console.log(el);
})

但如果我尝试这样做:

 function printArgsInfo() {
    arguments.forEach(function (el) {
        console.log(el);
    });
}
printArgsInfo(2, 3, 2.5, -110.5564, false);

arguments .forEach 不是函数

即使 arguments 是一个数组,如果我尝试使用 for in 循环来执行此操作,它仍然有效。

原文由 Все Едно 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
1 个回答

arguments 是一个类似数组的对象,但不是数组:

 var doThing = function() {
    console.log(arguments.constructor.name)
    console.log([].constructor.name)
}

doThing("someArgument")

将返回 Object 对于 argumentsArray 对于空数组 []

ES6 及更新版本

对于 ES6,您可以使用 剩余参数 ... ,正如 torazaburo 所建议的那样。

剩余参数 语法允许我们将不定数量的参数表示为数组。

 function printArgsInfo(...args) {
    args.forEach(el => console.log(el));
}

printArgsInfo(2, 3, 2.5, -110.5564, false);

ES5 及更早版本

For ES5 and older, you could borrow the method from Array#forEach and call it with argument as thisArg .

 function printArgsInfo() {
    [].forEach.call(arguments, function (el) {
        console.log(el);
    });
}

printArgsInfo(2, 3, 2.5, -110.5564, false);

原文由 Nina Scholz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题