符号的意义
- ES6引入了一种新的基本类型:Symbol
- 符号本身的内部值是隐藏的且无法获得的
符号的主要意义是创建一个类似字符串的不会与其他任何值冲突的独一无二的值
创建一个Symbol
Symbol没有字面量形式
- Symbol前面也不能加new
传给Symbol的参数是可选的,用于为这个symbol的用途提供一个友好的提示
let sym = Symbol('some optional description')
let sym2 = Symbol('some optional description')
sym === sym2 // false
typeof sym // 'symbol'
sym instanceof Symbol // false
全局注册
Symbol.for(‘description’)在全局符号注册表中搜索,来查看是否有描述文字相同的符号已存在,如果有的话就返回它,如果没有的话,会新建一个并返回
- Symbol.keyFor(sym)提取注册符号的描述文本
let globalSym = Symbol.for('global')
Symbol.keyFor(globalSym) // 'global'
作为对象属性的键
如果把符号用作对象的属性键名,那么它会以一种特殊的方式存储,使得这个属性不出现在这个对象的枚举属性中 ```javascript let obj = { a: ‘’, b: ‘’,
} Object.getOwnPropertyNames(obj) // [‘a’,’b’] // 但是可以通过Object.getOwnPropertySymbols()获得对象的符号属性 Object.getOwnPropertySymbols(obj) // [ Symbol(c), Symbol(d) ] ```