为什么javascript';s ES6/Harmony Set对象是否为键/值/条目方法返回空对象?

为什么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

我正在节点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()
让我们这样说,其中
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中有: