总结
符号是 JS
新引入的基本类型值,它用于创建不可枚举的属性,并且这些属性在不引用符号的情况下是无法访问的。
虽然符号类型的属性不是真正的私有属性,但它们难以被无意修改,因此在需要提供保护以防止开发者改动的场合中,它们非常合适。
你可以为符号提供描述信息以便更容易地辨识它们的值。全局符号注册表允许你使用相同的描述信息,以便在不同的代码段中共享符号值,这样相同的符号值就可以在不同位置用于相同目的。
Object.keys()
或 Object.getOwnPropertyNames()
不会返回符号值,因此 ES6
新增了一个 Object.getOwnPropertySymbols()
方法,允许检索符号类型的对象属性。而你依然可以使用 Object.defineProperty()
与 Object.defineProperties()
方法对符号类型的属性进行修改。
“知名符号” 使用了全局符号常量(例如 Symbol.hasInstance
),为常规对象定义了一些功能,而这些功能原先仅限内部使用。这些符号按规范使用 Symbol.
的前缀,允许开发者通过多种方式去修改常规对象的行为。