Все*_*дно 5 javascript foreach
所以这段代码完美无缺
var arr = [1, 2, 3, 4];
arr.forEach(function (el) {
console.log(el);
})
Run Code Online (Sandbox Code Playgroud)
但如果我尝试这样做:
function printArgsInfo() {
arguments.forEach(function (el) {
console.log(el);
});
}
printArgsInfo(2, 3, 2.5, -110.5564, false);
Run Code Online (Sandbox Code Playgroud)
参数.forEach不是函数即使tought参数是一个数组,如果尝试用forin循环执行它仍然有效.
arguments是一个类似于对象的数组,但不是数组。在这种情况下,你可以从借用的方法Array#forEach,并call用它argument作为thisArg。
function printArgsInfo() {
[].forEach.call(arguments, function (el) {
console.log(el);
});
}
printArgsInfo(2, 3, 2.5, -110.5564, false);Run Code Online (Sandbox Code Playgroud)
使用ES6,您可以使用rest参数...,如torazaburo建议的那样。
的其余参数语法允许我们表示的参数的不确定数目为一个数组。
function printArgsInfo(...args) {
args.forEach(el => console.log(el));
}
printArgsInfo(2, 3, 2.5, -110.5564, false);Run Code Online (Sandbox Code Playgroud)
甚至tought参数也是一个数组
事实并非如此.
function myFunc() {
console.log(arguments instanceof Array);
}
myFunc(1,2,3);Run Code Online (Sandbox Code Playgroud)
的参数对象是一个数组状物体.它不是一个数组.
小智 5
根据 MDN 文档:
arguments 对象是一个类数组对象,对应于传递给函数的参数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
所以,它不是一个真正的数组,也不共享 Array 对象的原型——这forEach是定义方法的地方。
有趣的是,同样来自 MDN 文档:
您还可以使用 Array.from() 方法或扩展运算符将参数转换为真正的数组
var args = Array.from(arguments);
Run Code Online (Sandbox Code Playgroud)
因此,这是您的代码的工作示例:
function printArgsInfo() {
var args = Array.from(arguments);
args.forEach(function (el) {
console.log(el);
});
}
printArgsInfo(2, 3, 2.5, -110.5564, false);
Run Code Online (Sandbox Code Playgroud)