为什么javascript';s ES6/Harmony Set对象是否为键/值/条目方法返回空对象?
我正在节点4.1.2中试用新的为什么javascript';s ES6/Harmony Set对象是否为键/值/条目方法返回空对象?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我正在节点4.1.2中试用新的集合对象,我看到值、键、和条目方法都始终返回空对象。例如: var x = new Set x.add(1) x.add(2) x.values() // returns {} 这是预期的行为吗?我无法想象。值在那里,只是util.inspect()没有显示它们。这已经在master中修复,后者是v4.1.2之后的版本。因此,每当v4.1.3发布时,您都会看到修复程序。ES6添加了一些新技巧,包括迭代协议。您可能想了解一下MDN,以便更准确地掌握如何利用它们for
集合对象,我看到值、键、和条目方法都始终返回空对象。例如:
var x = new Set
x.add(1)
x.add(2)
x.values() // returns {}
这是预期的行为吗?我无法想象。值在那里,只是util.inspect()
没有显示它们。这已经在master中修复,后者是v4.1.2之后的版本。因此,每当v4.1.3发布时,您都会看到修复程序。ES6添加了一些新技巧,包括迭代协议。您可能想了解一下MDN,以便更准确地掌握如何利用它们<代码>for(数组中的项)
仍然存在,但您可以将新的用于。。。在某些事情上的
考虑到您的代码:
var x = new Set
x.add(1)
x.add(2)
x.values()
让我们这样说,其中var y=x.values()
,y
是迭代器
为了在所述迭代器上迭代,您使用for(let item of iterable){}
循环。在本例中,您将使用:
for(let z of x){
console.log(z);
}
将打印出:
1
2
x.values()
不是迭代器吗?如果您.next().value
它会发生什么情况?嘿,x.values().next().value
似乎有效。这就引出了一个问题:为什么javascript有迭代器?既然它有迭代器,为什么它们不在for(x in y)
循环中工作呢?因为你使用for(让z of x){console.log(z);}
我明白了。实际上,这并不是说“你现在使用的是
的”
。“在
中对..的使用根本没有改变。相反,for..of
是一种新的构造,它对值而不是键进行迭代,并且由于迭代器没有键,中的没有任何循环。我仍然认为他们最好远离迭代器的概念。for(x.values()中的var n){console.log(n)}
什么都不记录,所以我不认为这只是一个util.inspect()
问题。看起来,将迭代器转换为数组在2.5.0中不太常见,但在v4中有: