symbol是es6新增的基本类型 跟string一级,它的功能相似于一种标识惟一性的ID;es6
symbol能够被typeof识别 类型就为symbol;spa
例子:code
let s2 = Symbol('another symbol')
关注点:一样的字符串或者数字用symbol处理后 ==和===两边是不相等的对象
let s1 = Symbol() let s2 = Symbol('another symbol') let s3 = Symbol('another symbol') s1 === s2 // false s2 === s3 // false
应用场景:属性,方法私有化:当你不想暴露给外界一些key值的时候 只用于内部的时候 能够使用此方式blog
let obj = { [Symbol('name')]: '一斤代码', age: 18, title: 'Engineer' } Object.keys(obj) // ['age', 'title'] for (let p in obj) { console.log(p) // 分别会输出:'age' 和 'title' } Object.getOwnPropertyNames(obj) // ['age', 'title']
应用场景:当使用JSON.stringify()
将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容以外:字符串
JSON.stringify(obj) // {"age":18,"title":"Engineer"}
如何提取symbolget
// 建立一个 symbol 并放入 Symbol 注册表,key 为 "foo" var globalSym = Symbol.for("foo"); Symbol.keyFor(globalSym); // "foo" // 建立一个 symbol,但不放入 symbol 注册表中 var localSym = Symbol(); Symbol.keyFor(localSym); // undefined,因此是找不到 key 的