为什么javascript的ES6 / Harmony Set对象返回键/值/条目方法的空对象?

时间:2015-10-06 19:09:23

标签: javascript node.js ecmascript-6

我正在尝试节点4.1.2中的新Set对象,我发现valueskeysentries方法总是返回空物。例如:

var x = new Set
x.add(1)
x.add(2)
x.values() // returns {}

这是预期的行为吗?我无法想象它是什么。

2 个答案:

答案 0 :(得分:1)

ES6增加了一些新的技巧,包括迭代协议。您可能需要查看MDN上的Iteration Protocols以更加深入地了解如何使用它们。 for ... of仍然存在,但您可以在某些事情上使用新的var x = new Set x.add(1) x.add(2) x.values()

考虑您的代码:

var y = x.values();

我们这样说,yfor(let item of iterable){}是迭代器;

为了遍历所述迭代器,您使用for(let z of x){ console.log(z); } 循环。在这种情况下,您将使用:

1
2

哪个会打印出来:

synchronized (readyLock) { //sets this thread's status to ready
readyLock.notify();
System.out.println("notify works");
try {
    readyLock.wait();
    System.out.println("woke up from sleep");
} catch (InterruptedException ex) {
    Logger.getLogger(Battleship_server_clientThread.class.getName()).log(Level.SEVERE, null, ex);
}
readyLock.notify();
}
while (true) { //game loop             

//Some stuff here        

    synchronized (readyLock) { //sets this thread's status to ready
        readyLock.notify();
        System.out.println("notify works");
        try {
            readyLock.wait();
            System.out.println("woke up from sleep");
        } catch (InterruptedException ex) {
            Logger.getLogger(Battleship_server_clientThread.class.getName()).log(Level.SEVERE, null, ex);
        }
        readyLock.notify();
    }
//Some more stuff here
}

答案 1 :(得分:0)

值存在,只是util.inspect()没有显示它们。这已经在使用88533881d的master中修复,这是在v4.1.2之后。所以每当v4.1.3发布时你都会看到修复。