Symbol定义
ES6中引入了一种新的数据结构,美名其曰
Symbol。它出现的目的是为了解决我们在定义某特定的场景下,创建一个独一无二的值。
直接定义:
// 没有参数的Symbollet sym1 = Symbol();let sym2 = Symbol();console.log(sym1 === sym2); // false// 有参数的Symbollet bol1 = Symbol('Symbol1')let bol2 = Symbol('Symbol2')console.log(bol1 === bol2); // false
description
上面定义的
Symbol括号里面可以传参数,但是传了参数如何获取呢?那么接下来我们一起来看一下。
let sym = Symbol('Symbol描述')console.log(sym.description); // Symbol描述
for
此for非彼for,在我们有需要需要使用同一个
Symbol的时候。发现它是唯一的无法重新赋值给其他变量或者无法公用。那怎么办呢。那么我们在使用的时候就可以使用Symbol.for来定义。
let cmd = Symbol.for('for 描述')let edn = Symbol.for('for 描述')console.log(cmd === edn); // true
keyFor
for定义的
Symbol类型,如果添加了描述需要使用keyFor来获取
console.log(Symbol.keyFor(cmd));
遍历
Symbol使用for in 和for of 是无法遍历得到的,我们可以Reflect.ownKeys才能获取到~~
let symbol = Symbol()let obj = {name:"前端伪大叔",[symbol]:19}// 使用for in 变量无法变量 symbol类型的for (const k in obj) {console.log(k);}// 使用for of 通用无法变量 symbol类型for (const k of Object.keys(obj)) {console.log(k);}// 使用Reflect.ownKeys 就可以完美的轻松遍历for (const k of Reflect.ownKeys(obj)) {console.log(k);}
