2016-04-12 10 views
0

Ne olduklarını anlamaya çalışan, ES6 semboller keşfetmek ve ben henüz sembolleri anlayamıyorum Bu davranışaBir sembolün anahtar olarak kullanılıp kullanılmadığını nasıl anlarım?

> let sym = Symbol() 
> let a = {} 
> a[sym]= "value" 
'value' 
> a 
{} 
> Object.keys(a) 
[] 
> Object.getOwnPropertyNames(a) 
[] 
> a[sym] 
'value' 
> a[Symbol()] 
undefined 
> JSON.stringify(sym) 
undefined 
> JSON.stringify(a) 
'{}' 
> sym 
Symbol() 

kafamı sarmak olamaz, ama nerede anahtar ve değer gizleme olduğunu?!? Java senaryosu büyücülük ve büyücülük alanına mı düştü? Zaten orada olduğunu söylemek için var mı?

DÜZENLEME ::

) (Object.getOwnPropertySymbols hakkında bana bildirdiğiniz için teşekkür ederiz;

ES6 ile birlikte, gizli olmayan sayılabilir olmayan özellikler için Object.getOwnPropertyNames() ve Object.getOwnPropertySymbols() yöntemini kontrol etmem gerekiyor mu?

+0

bu yardımcı emin değildir. "Bir sembol benzersiz ve değişmez bir veri türü ve nesne özellikleri için bir tanımlayıcı olarak kullanılabilir sembol nesne sembol temel veri türü örtülü bir nesne sarıcı" https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol – pherris

+1

Hem mevcut hem de mevcut olmayan bir süperpozisyon var mı? SchrödingerCats() – lonewarrior556

+1

için yeniden adlandırma sembolleri 'Object.getOwnPropertySymbols (a) ' – pherris

cevap

4

MDN adresinden Object.getOwnPropertySymbols(a) numaralı telefonu kullanabilirsiniz.

bazı ek bağlam sağlar bu makalede rastladım: - onlar Nesneler tabakasının altında gizli bir tür sağlamak - http://blog.keithcirkel.co.uk/metaprogramming-in-es6-symbols/

Semboller Nesneler amaç yepyeni fikir verir, bitmedi iterable değil Mevcut Yansıma araçlarını kullanarak getirilir ve nesnedeki diğer özelliklerle çakışmama garantili!

+1

ile edinebilirsiniz. Object.getOwnProperties() 've diğer ikisini de yalnızca birini veya diğerini istediğiniz durumlarda bırakın. –