如何判断符号是否用作键?

时间:2016-04-12 20:03:27

标签: javascript ecmascript-6

我正在探索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()以获取隐藏的非可枚举属性吗?

1 个答案:

答案 0 :(得分:4)

来自MDN看起来您可以使用Object.getOwnPropertySymbols(a)获取它们。

我偶然发现了这篇文章,它提供了一些额外的背景: http://blog.keithcirkel.co.uk/metaprogramming-in-es6-symbols/

  

符号为对象提供了全新的目的感 - 它们为对象提供了一种隐藏的下层 - 不可迭代,不使用现有的反射工具获取,并保证不与对象中的其他属性冲突! / p>