6

Node.JS v0.11.4 の ECMAScript 6 シンボルとマップを--harmonyフラグで遊んでいます。以下を検討してください。

var a = Map();
a.set(Symbol(), 'Noise');

// Prints "1"
console.log(a.size);

'Noise'一意であることが保証されている「匿名」シンボル キーによってプロパティが識別される場合、値を取得できますか?

4

1 に答える 1

5

v8 の現在のバージョンは、このバグ レポートに示されているように反復を実装していないため、node.js でこれを行うことはできません。

v8 のcollection.jsのソース コードを見ると、それを確認できます。

InstallFunctions($Map.prototype, DONT_ENUM, $Array(
    "get", MapGet,
    "set", MapSet,
    "has", MapHas,
    "delete", MapDelete,
    "clear", MapClear
));

しかし、 ECMAScript 6 wikiに見られるようitems()に、keys()、 、もあるはずvalues()です。v8 は、ジェネレーターをサポートしていなかったため、おそらく以前はこれらのメソッドを実装していませんでした。しかし、今では今年の5月からそうです。これが実装されるのは時間の問題です。

この機能が必要な場合は、map-set-for-each which polyfillsを使用できますforEachcase 'symbol':afterを追加するように変更する必要がありますcase 'object':

a.forEach(function(value, key) {
  if (value === 'Noise') {
    console.log('Give mak the bounty');
  }
});

v8 が反復を実装すると、次のMapように見つけることができますNoise

for (let [key, value] of a) {
  if (value === 'Noise') {
    console.log('Upvotes for future');
  }
}
于 2013-07-13T10:39:07.573 に答える