symbol是es6新增的基本类型 跟string一级,它的功能类似于一种标识唯一性的ID;

symbol可以被typeof识别 类型就为symbol;

例子:

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值的时候 只用于内部的时候  可以使用此方式

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"}

如何提取symbol

// 创建一个 symbol 并放入 Symbol 注册表,key 为 "foo"
var globalSym = Symbol.for("foo");
Symbol.keyFor(globalSym); // "foo"

// 创建一个 symbol,但不放入 symbol 注册表中
var localSym = Symbol();
Symbol.keyFor(localSym); // undefined,所以是找不到 key 的
02-13 04:44