arguments对象在ES6中应该是可迭代的
Is the arguments object supposed to be an iterable in ES6?
在ES6中,当传递给Set
构造函数时,我试图将arguments
对象用作可迭代对象。它在IE11和Chrome 47中运行良好。它在Firefox 43中不起作用(抛出一个TypeError: arguments is not iterable
)。我已经查看了ES6规范,但并没有真正找到arguments
对象是否应该是可迭代对象的定义。
下面是我尝试做的一个例子:
function destroyer(arr) {
var removes = new Set(arguments);
return arr.filter(function(item) {
return !removes.has(item);
});
}
// remove items 2, 3, 5 from the passed in array
var result = destroyer([3, 5, 1, 2, 2], 2, 3, 5);
log(result);
仅供参考,我知道这段代码有各种解决方法,例如将arguments对象复制到实际数组中或使用rest参数。这个问题是关于arguments
对象是否应该是ES6中的iterable
,它可以在任何期望迭代的地方使用。
我想这是FF实现中的一个错误。
根据9.2.12函数声明实例化(函数,参数列表)部分,
如果argumentsObjectNeeded为true,则
a) 如果strict为true或simpleParameterList为false,则
===>i) 设ao为CreateUnmappedArgumentsObject(argumentsList)。
b) 否则,
===>i) 注:映射的参数对象只提供给没有rest参数、任何参数默认值初始值设定项或任何析构函数参数的非严格函数。
===>ii)设ao为CreateMappedArgumentsObject(函数、形式、参数列表、env)。
CreateMappedArgumentsObject
和CreateUnmappedArgumentsObject
都具有
执行DefinePropertyOrThrow(obj,@@iterator,PropertyDescriptor{[[Value]]:%ArrayProto_values%,[[Writable]]:true,[[Enumerable]]:false,[[Configuration]]:true})。
这意味着@@iterator
属性实际上应该已经在arguments
对象上定义。
- 如何在DataTables 2.1中迭代对象数组
- 基于使用angular在下拉列表中选择的对象,迭代对象内部的对象
- 为什么数组在对象内部迭代对象时存储重复值
- 为什么我不能用for Each迭代对象
- 为什么字符串在 ES2015 中是可迭代对象
- 如何通过迭代对象数组来删除某些项目
- 在不同数据选项之间循环迭代对象
- 延迟迭代对象
- 在 es6 中迭代对象并返回新对象
- Javascript:如何迭代对象[Key:value],但跳过一些键([最快的方法])
- 如何使用Meteor.js中的Template辅助对象迭代对象中的两个数组
- JavaScript如何在内部迭代对象键
- 如何迭代对象/数组中的项,并构建嵌套的JSON
- 创建一个生成器来迭代对象属性排列
- 使用map迭代对象数组
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 用于迭代对象的 for 循环
- 在角度ng重复中迭代对象的数组
- 如何在 Javascript 中迭代对象数组
- 迭代对象内部的对象