当我尝试
时[1,2,3].forEach(alert);
按预期打开数组中每个项目的消息框。
但是当我尝试
时[1,2,3].forEach(console.log);
我收到以下错误
Uncaught TypeError: Illegal invocation
为什么呢?
答案 0 :(得分:7)
我个人得到Invalid calling object
。
请参阅,[1,2,3].forEach(console.log)
本质上是迭代数组和运行console.log.call(theArray,theItem)
的每个项目的简便方法。但是,console.log
要求this
成为Console
类型的对象,从而导致错误。
尝试[1,2,3].forEach(function(i) {console.log(i);})
答案 1 :(得分:1)
实际上,它在Firefox中不起作用,或者至少不像您预期的那样:
[1,2,3].forEach(console.log)
给你:
1 0 [1, 2, 3]
2 1 [1, 2, 3]
3 2 [1, 2, 3]
为什么呢? MDN有你的答案:
使用三个参数调用回调:
元素值
元素索引
正在遍历的数组
然而,
[1,2,3].forEach(function(i) { console.log(i); });
完全按照您在Firefox和Chrome中的预期工作。