2015-09-12 16 views

答えて

24

Listがインスタンス化されたオブジェクトからアクセス可能であるとは限りません。これは、ECMAScriptのドラフトからです:設定インスタンスの

23.2.4プロパティ

セットのインスタンスがセットプロトタイプからプロパティを継承普通のオブジェクトです。セットインスタンスには[[SetData]]内部スロットもあります。

[[SetData]]は値のリストであり、セットは保持しています。

可能な解決策(やや高価なもの)はイテレータを取得し、その後、最初の値のためnext()を呼び出すことです:

var x = new Set(); 
x.add(1); 
x.add({ a: 2 }); 
//get iterator: 
var it = x.values(); 
//get first entry: 
var first = it.next(); 
//get value out of the iterator entry: 
var value = first.value; 
console.log(value); //1 

価値はあまりにも言及:

Set.prototype.values === Set.prototype.keys 
+1

Protip: '.entries()'の代わりに '.values()'を使用してください。 – Bergi

+0

正しい、良い点。値は '[key、value]'ではなく単に 'value'を持つイテレータを生成します。 – MinusFour

+3

Btw、イテレーターはかなり高価であると考えられていますが、そのアプローチはかなり最適です... – Bergi