为什么默认情况下对象不可迭代?
我一直看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问对象中的值.这似乎很常见,它让我想知道为什么对象本身不可迭代.
for...of默认情况下,像ES6 这样的语句很适合用于对象.因为这些功能仅适用于不包含{}对象的特殊"可迭代对象" ,所以我们必须通过箍来使这个对我们想要使用它的对象起作用.
for ... of语句创建一个循环迭代可迭代对象 (包括Array,Map,Set,arguments对象等)......
例如,使用ES6 生成器功能:
var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}};
function* entries(obj) {
for (let key of Object.keys(obj)) {
yield [key, obj[key]];
}
}
for (let [key, value] of entries(example)) {
console.log(key);
console.log(value);
for (let [key, value] of entries(value)) {
console.log(key);
console.log(value);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Firefox(支持ES6)中运行代码时,上面按照我期望的顺序正确记录数据:

默认情况下,{}对象不可迭代,但为什么?缺点是否超过了可迭代对象的潜在好处?与此相关的问题是什么?
此外,由于{}对象是从"阵列状"集合和"可迭代的对象",如不同NodeList,HtmlCollection以及arguments …