2013-07-08 14 views
6

ECMAScript 6のシンボルとマップをNode.JS v0.11.4の--harmonyフラグで再生しています。以下を考慮する。リカバリプロパティのキー/値

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

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

値は、プロパティが一意であることが保証されている「匿名」の記号キーによって識別される与え取り出すこと'Noise'できますか?

+0

私が漏れについて知らないが、あなたはせずに戻って値を取得することはできませんSymbol()returnを参照してください。 – dandavis

+1

ES 6のシンボルがどのように動作するのかわかりませんが、オブジェクトを列挙できませんか? 'for(var key in a)警告([key]);' – jods

答えて

5

v12の現在のバージョンでは、このbug reportのように反復処理が実装されていないため、node.jsで実行することはできません。私たちは、V8のcollection.jsのソースコードを見ることであることを確認することができ

ECMAScript 6 wikiに見られるように、

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

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

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

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'); 
    } 
}