JavaScript符号类型:(非字符串对象键)
JavaScript Symbol type: (non-string object keys)
什么是"符号";在ECMAScript 6规范草案中提到的javascript类型?
引用规格:
Symbol类型是可以用作Object属性键的所有非String值的集合。
每个可能的Symbol值都是唯一且不可变的。
符号值有一个名为[[Private]]的可观察属性,其不可变值为true或false。专用符号是其[[private]]属性的值为true的symbol值。
我以为对象键只是字符串,我并不孤单。引用这个公认的SO答案:
…对象键总是字符串…
你能解释一下符号类型是什么,并演示一下它的用法吗。我想弄清楚的规格
谢谢!
我以为对象键只是字符串
你是对的,但这只适用于EcmaScript 5。ES 6/和谐是新事物的草稿!
我想弄清楚的规格
这只是一个草案,变化很快。符号的使用方式以及是否或如何由任意脚本创建似乎还没有确定(扫描版本以了解更改)。
例如,如果向下滚动到该文档的最后(甚至在附录F下方),您将看到已移出的第8.4.4节:符号外来对象。它表示
Exotic Symbol对象为所有基本的内部方法提供了替代定义。
例如,您可以在第8.1.7.4节中看到它们的使用。对于Symbol
构造函数的拟议用途(以及仍然存在的问题/开放问题),请查看这些strawman页面或此wiki网站。
Symbol
是作为ECMAScript 6:的一部分提出的语言的新添加
ECMAScript的当前工作™
关于未来ECMAScript的工作™版本继续作为先前发布的ECMAScript的一部分™ "和谐"项目关于ECMAScript的当前工作的更多细节";和谐"在这个Wiki上进行了描述。该标准的第六版目前正在开发中,目标完成日期为2013年12月。
我们使用符号使对象的属性或方法私有。因此,我们隐藏了细节,只显示了要点。它被称为abstraction
。
如何实现:让我们用"半径";属性
class Circle {
constructor(radius) {
this.radius = radius;
}}
符号本质上是一个唯一的标识符。每次调用这个函数时,我们都会得到一个唯一的标识符。不过,它不是构造函数。
Symbol()===Symbol() //will be false
实施:
const _radius=Symbol()
class Circle {
constructor(radius) {
this[_radius] = radius; //since property name starts with _, we use bracket notation
}
}
现在测试一下。创建Circle:的实例
const c=new Circle;
console.log(Object.getOwnPropertyNames(c))// you will see a number on the console.
- 字符串对象类型或基元类型也是如此
- Javascript-如何从字符串/对象引用回调
- JavaScript,字符串/对象操作的例外
- 如何在require中传递字符串/对象
- 字符串对象比较总是返回false
- 对字符串对象调用 .localeCompare 与构造特制的 Intl.Collator 对象之间的性能差异
- 将变量打印到控制台时出现意外字符串:[对象窗口]
- 如何使用javascript在字符串对象中添加原型
- 如何在 JavaScript 中设置/更新字符串对象的值
- jQuery:在 $.each 中从字符串类型转换为字符串对象
- 将属性添加到字符串对象时出现问题
- 从字符串对象中删除第一个出现的字母
- 如何正确地将JQuery函数从表单的输入标记中检索到的这些字符串对象转换为数字
- 转换“;字符串对象“;到对象
- Javascript中字符串对象到字符串原语的转换
- JavaScript符号类型:(非字符串对象键)
- 正在重新定义字符串对象中的长度属性
- 带有字符串对象的jQuery选择器不起作用
- 如何在javascript中将JSON字符串对象打印为下拉列表
- 将日期字符串对象转换为其他格式