JavaScript符号类型:(非字符串对象键)

时间:2013-07-20 07:17:34

标签: javascript string object key ecmascript-6

什么是“符号”javascript类型as mentioned in this ECMAScript 6 draft specification

引用规范:

  

符号类型是可用作Object属性键的所有非String值的集合。

     

每个可能的符号值都是唯一且不可变的。

     

符号值具有一个名为[[Private]]的可观察属性,其不可变值为true或false。私有符号是一个符号值,其[[Private]]属性的值为true。

我认为对象键只是字符串,而我并不孤单。引用this accepted SO answer

  

...对象键总是字符串......

您可以解释符号类型是什么,并演示其用法。我正试图理解规范。

谢谢!

3 个答案:

答案 0 :(得分:6)

  

我认为对象键只是字符串

你是对的,但仅适用于EcmaScript 5。 ES 6 / harmony是新事物的草稿!

  

我正在尝试理解规范

这只是草稿,rapidly changing。如何使用符号以及是否或如何通过任意脚本创建它们似乎尚未解决(通过versions扫描更改)。

如果向下滚动到that document的末尾(甚至低于附件F),您将看到一个第8.4.4节:符号外来对象已被移出那里。它声明

  

Exotic Symbol对象为所有必要的内部方法提供了替代定义。

例如,您可以在section 8.1.7.4 Well-Known Symbols and Intrinsics看到它们的使用情况。对于Symbol构造函数的建议用法(以及仍存在的问题/未解决的问题),请查看these strawman个网页或this wiki site

答案 1 :(得分:0)

SymbolECMAScript 6

中提出的语言的新增内容。

  

目前关于ECMAScript™的工作

     

未来ECMAScript™版本的工作将继续作为之前宣布的ECMAScript™“Harmony”项目的一部分。关于ECMAScript“Harmony”的当前工作的更多细节在本Wiki上有所描述。该标准的第六版目前正在制定中,目标日期为2013年12月完成。

答案 2 :(得分:0)

我们使用符号将对象的属性或方法设为私有。因此,我们隐藏细节并仅显示要点。称为抽象​​。

如何实现:让我们创建一个具有“ radius”属性的简单类

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.