javascript - JS arguments.forEach 不是函数

标签 javascript 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 循环执行此操作,它仍然有效。

最佳答案

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

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

doThing("someArgument")


将为参数返回Object,为空数组[]返回Array

ES6 及更新版本

对于 ES6,你可以使用 rest parameters ... ,正如 torazaburo 所建议的那样。

The rest parameter syntax allows us to represent an indefinite number of arguments as an array.

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

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

ES5 及更早版本

对于 ES5 及更早版本,您可以借用 Array#forEach 中的方法和 call它以 argument 作为 thisArg

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

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

关于javascript - JS arguments.forEach 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44434622/

相关文章:

javascript - 如何用参数做 $state.go() ?

javascript - 文本字段的虚拟键盘弹出onfocus

sql-server - 具有视觉反馈的 SSIS Foreach 循环

php - 遍历多维数组

php - 对 foreach 循环结果进行排序

javascript - Chrome为什么在音频播放时要求提供图标?

javascript - TR ID 元素可以通过 jQuery 验证显示和隐藏吗?

javascript - 是否可以将 domain.ext、sub1.domain.ext 和 sub2.domain.ext 的 cookie 相互隔离?

java - 我可以在使用 Iterable.forEach(Consumer) 迭代元素时更改元素吗?

c++ - g++ 编译器错误 : couldn't deduce template parameter ‘_Funct’