admin管理员组文章数量:1405621
What is the "Symbol" javascript type as mentioned in this ECMAScript 6 draft specification?
To quote the spec:
The Symbol type is the set of all non-String values that may be used as the key of an Object property.
Each possible Symbol values is unique and immutable.
Symbol values have a single observable attribute called [[Private]] whose immutable value is either true or false. A private symbol is a Symbol value whose [[Private]] attribute has the value true.
I thought object keys were strings only, and I'm not alone. To quote this accepted SO answer:
…object keys are always strings…
Could you explain what the symbol type is, and demonstrate its usage. I'm trying to make sense of the spec.
Thanks!
What is the "Symbol" javascript type as mentioned in this ECMAScript 6 draft specification?
To quote the spec:
The Symbol type is the set of all non-String values that may be used as the key of an Object property.
Each possible Symbol values is unique and immutable.
Symbol values have a single observable attribute called [[Private]] whose immutable value is either true or false. A private symbol is a Symbol value whose [[Private]] attribute has the value true.
I thought object keys were strings only, and I'm not alone. To quote this accepted SO answer:
…object keys are always strings…
Could you explain what the symbol type is, and demonstrate its usage. I'm trying to make sense of the spec.
Thanks!
Share Improve this question edited Jun 20, 2020 at 9:12 CommunityBot 11 silver badge asked Jul 20, 2013 at 7:17 Web_DesignerWeb_Designer 74.7k93 gold badges210 silver badges267 bronze badges 1- 1 That's ES6 spec, not sure but see if this helps: github./dherman/tc39-codex-wiki/blob/master/data/es6/symbols/… – elclanrs Commented Jul 20, 2013 at 7:20
3 Answers
Reset to default 6I thought object keys were strings only
You're right, but that was true for EcmaScript 5 only. ES 6 / harmony is a draft for something new!
I'm trying to make sense of the spec
It's a draft only, rapidly changing. How symbols are used and whether or how they can be created by arbitrary scripts does not seem to have settled yet (scan through the versions for changes).
If you scroll down to the very end of that document (even below Annex F), you for example will see a Section 8.4.4: Symbol Exotic Objects that has been moved out there. It states
Exotic Symbol objects provide alternative definitions for all of the essential internal methods.
You can see them used at section 8.1.7.4 Well-Known Symbols and Intrinsics for example. For proposed uses (and still existing problems / open questions) of Symbol
constructors have a look at these strawman pages or this wiki site.
Symbol
is a new addition to the language proposed as part of ECMAScript 6:
Current work on ECMAScript™
Work on future ECMAScript™ editions continues as part of the previously announced ECMAScript™ "Harmony" project. More details of the current work on ECMAScript "Harmony" are described on this Wiki. A sixth edition of the standard is currently under development with a target date of December 2013 for pletion.
We use symbols to make the properties or methods of an object private. So we hide the details and show only the essentials. It is called abstraction
.
How to implement this: Let's create a simple class with "radius" property
class Circle {
constructor(radius) {
this.radius = radius;
}}
A symbol is essentially a unique identifier. Every time we call this function we get a unique identifier. It is not a constructor function,though.
Symbol()===Symbol() //will be false
Implementation:
const _radius=Symbol()
class Circle {
constructor(radius) {
this[_radius] = radius; //since property name starts with _, we use bracket notation
}
}
now test this. Create an instance of Circle:
const c=new Circle;
console.log(Object.getOwnPropertyNames(c))// you will see a number on the console.
本文标签: JavaScript Symbol type (nonstring object keys)Stack Overflow
版权声明:本文标题:JavaScript Symbol type: (non-string object keys) - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744282518a2598722.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论