ES6学习之Symbol
定义:一种新的原始数据类型,表示独一无二的值
const a = Symbol(); const b = Symbol("foo") //接收参数的Symbol,参数表示对Symbol的描述
相同参数的Symbol不相等
const a = Symbol(); const b = Symbol(); a === b //false const c = Symbol("foo"); const d = Symbol("foo"); c === d //false
symbol值不能与其他类型做运算,但能显示的转化为字符串和布尔值
const c = Symbol("foo");
let d = "hello" + c; //TypeError: Cannot convert a Symbol value to a string
String(c); //Symbol(foo)
c.toString(); //Symbol(foo)
Boolean(c) //true
Symbol作为属性名,不能使用点符号,只能使用括号括起来
const a = Symbol("foo");
let b = {};
b.a = "Hello";
b[a] = "Hi";
console.log(b[a]) //Hi
Symbol作为属性名,遍历时:该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是可以通过Object.getOwnPropertySymbols获取Symbol的属性名
const obj = {}; let a = Symbol('a'); let b = Symbol('b'); obj[a] = 'Hello'; obj[b] = 'World'; const objectSymbols = Object.getOwnPropertySymbols(obj); objectSymbols // [Symbol(a), Symbol(b)]
Symbol.for(),Symbol.keyFor()
- Symbol.for():接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
const a = Symbol.for("foo"); const b = Symbol.for("foo"); a ===b //true
Symbol.keyFor():返回一个已登记的 Symbol 类型值的key
let s1 = Symbol.for("foo"); Symbol.keyFor(s1) // "foo" let s2 = Symbol("foo"); Symbol.keyFor(s2) // undefined

浙公网安备 33010602011771号