> 历史文化
es6基础教程(es6常用方法)
导语:ES6 极简教程 Symbol
概念
一句话:提供一个独一无二的值。
let a1 = Symbol();let b1 = Symbol();console.log(a1) // Symbol()console.log(a1 === b1); // false
Symbol()函数有一个可选参数,表示描述,主要是为了打印时区分。
let a1 = Symbol('a1');console.log(a1) // Symbol(a1)
作用
对象的属性都是字符串,很容易造成重复冲突,特别容易出现在继承和对象合并中。这时候引用Symbol可以避免此类问题。
let a1 = Symbol('abc');let obj = { [a1]: '123', abc: '456', def: '789'}console.log(obj[a1]) // 123console.log(obj); // {abc: "456", def: "789", Symbol(abc): "123"}
注意: Symbol出现在对象定义中&获取对象只过程中要用中括号扩起来(如果没扩就成字符串了)
遍历
for (let [key, value] of Object.entries(obj)) { console.log(key, value);}// abc 456// def 789
使用常规方法取obj值的时候没法取到Symbol为key的值。
这要时候使用 Object.getOwnPropertySymbols 它返回一个所有Symbol作为key值的数组。
或者使用Reflect , 它返回Symbol作为key值和非Symbol的所有key的数组。(后续文章细讲)
Object.getOwnPropertySymbols(obj) // [ Symbol(abc) ]Reflect.ownKeys(obj) // [ 'abc', 'def', Symbol(abc) ]
symbol.for Symbol.keyFor
此方法参数为一个key值。当调用这个的时候,它会先检查全局下是否用这个key值是否注册过Symbol值,如果注册过,他将返回这个Symbol 值。
let s1 = Symbol.for('cat');let s2 = Symbol.for('cat');s1 === s2 // true
Symbol.keyFor返回一个已登记的 Symbol 类型值的key
let s1 = Symbol.for("cat");Symbol.keyFor(s1) // "cat"let s2 = Symbol("cat");Symbol.keyFor(s2) // undefined
声明
转载请联系我本人并标明出处。
本文内容由快快网络小鸣创作整理编辑!