Symbol定义
ES6中引入了一种新的数据结构,美名其曰
Symbol
。它出现的目的是为了解决我们在定义某特定的场景下,创建一个独一无二的值。
直接定义:
// 没有参数的Symbol
let sym1 = Symbol();
let sym2 = Symbol();
console.log(sym1 === sym2); // false
// 有参数的Symbol
let 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);
}