2013-07-08 45 views
6

ECMAScript 6 simgeleri ve Node.JS v0.11.4 ile --harmony bayrağında bulunan haritalarda oynuyorum. Aşağıdakileri göz önünde bulundur. Özellik anahtarını kurtar/değeri

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

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

değerin benzersiz olması sağlanır "anonim" sembolü anahtarına göre mülkiyet tanımlanır vermiş olduğu alınabilir 'Noise' mi?

+0

i sızıntı bilmem, ama bir olmadan geri değere alamayan Sembol() geri dönmek ... – dandavis

+1

ES 6 sembollerinin nasıl çalıştığı hakkında hiçbir fikrim yok, ama bir nesneyi numaralandıramıyor musunuz? için (a anahtarında var) uyarısı (a [tuşu]); ' – jods

cevap

5

node.js dosyasında yapılması mümkün değildir, çünkü v8'in geçerli sürümü bu bug report numaralı belgede belirtildiği gibi yineleme uygulamamıştır.

Biz v8 en collection.js kaynak koduna bakarak teyit edebilirsiniz: ECMAScript 6 wiki de görülebileceği gibi,

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

Ama aynı zamanda items(), keys() ve values() olmalıdır. v8, muhtemelen bu yöntemleri daha önce uygulamıyordu, çünkü jeneratörü desteklemiyordu. Ama şimdi bu yılın Mayıs ayından bu yana it does. Bu uygulanana kadar sadece bir zaman meselesi olmalı.

Şimdi bu işlevselliğe sahip olmanız gerekirse, map-set-for-each nolu polfilleri forEach kullanabilirsiniz. case 'object':'dan sonra case 'symbol': eklemek için değiştirmeniz gerekecektir.

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

v8 Map tekrarının uyguladığında böyle Noise bulmak mümkün olacak:

for (let [key, value] of a) { 
    if (value === 'Noise') { 
    console.log('Upvotes for future'); 
    } 
} 
İlgili konular