Node.JS v0.11.4 の ECMAScript 6 シンボルとマップを--harmony
フラグで遊んでいます。以下を検討してください。
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
'Noise'
一意であることが保証されている「匿名」シンボル キーによってプロパティが識別される場合、値を取得できますか?
Node.JS v0.11.4 の ECMAScript 6 シンボルとマップを--harmony
フラグで遊んでいます。以下を検討してください。
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
'Noise'
一意であることが保証されている「匿名」シンボル キーによってプロパティが識別される場合、値を取得できますか?
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を使用できますforEach
。case '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');
}
}