Symbol
Symbol
是内置对象 (built-in object), 其构造返回 symbol
基本类型, Symbol value
或 Symbol
, 具有唯一性。Symbol 通常用于表示对象的键的唯一性,不与其他键冲突,同时在常用的访问对象的手段中中隐藏自身,是一种弱封装。
Symbol()
调用保证返回值的唯一性。Symbol.for("key")
给定 "key"
每次调用都返回同样的 Symbol, 若给定 key 有全局 Symbol 注册,则返回注册的 Symbol, 否则创建新的 Symbol 并将 key 对应的 Symbol 注册到全局 Symbol 注册中,然后返回创建的 Symbol.
示例
创建 Symbol 基本类型,提供可选字符串做为描述:
let sym1 = Symbol();
let sym2 = Symbol("foo");
let sym3 = Symbol("foo");
上面创建了3个Symbol. 注意 Symbol(“foo”) 每次创建的不一样.
Symbol('foo') === Symbol('foo') // false
使用 new 操作符会报 TypeError:
let sym = new Symbol(); // TypeError
全局 Symbol registry 中的共享 Symbols
操作全局 Symbol 使用 Symbol.for() 及 Symbol.keyFor().
查找对象的 Symbol 属性
Object.getOwnPropertySymbols();
JSON.stringify() 会忽略 Symbol 类型的键。
静态属性
Symbol.asyncIterator 指定对象的默认异步遍历器
Symbol.hasInstance instanceof 操作符判定
Symbol.isConcatSpreadable
Symbol.iterator
…
思考
-
为什么 new Symbol() 会报错呢
-
Symbol 静态属性如何使用