我正在探索ES6符号,试图理解它们是什么,我无法绕过这种行为
> 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()
我还没有理解符号,但隐藏的关键和价值在哪里?!? java脚本是否属于巫术和巫术的范畴?反正有没有告诉它在那里?
EDIT ::
感谢您通知我有关Object.getOwnPropertySymbols();
的信息因此,对于ES6,我必须检查Object.getOwnPropertyNames()和Object.getOwnPropertySymbols()以获取隐藏的非可枚举属性吗?
答案 0 :(得分:4)
来自MDN看起来您可以使用Object.getOwnPropertySymbols(a)
获取它们。
我偶然发现了这篇文章,它提供了一些额外的背景: http://blog.keithcirkel.co.uk/metaprogramming-in-es6-symbols/
符号为对象提供了全新的目的感 - 它们为对象提供了一种隐藏的下层 - 不可迭代,不使用现有的反射工具获取,并保证不与对象中的其他属性冲突! / p>