es6中symbol 的理解

90 阅读1分钟

SymbolES6 新推出的一种基本类型,它表示独一无二的值

它可以选择接受一个字符串作为参数或者不传,但是相同参数的两个 Symbol 值不相等

//不传参数

const s1 = Symbol();

const s2 = Symbol();

console.log(s1 === s2); // false

// 传入参数

const s3 = Symbol('kk');

const s4 = Symbol('kk');

console.log(s3 === s4); // false

可以通过 typeof 判断是否为 Symbol 类型

console.log(typeof s1); // symbol

Symbol.for():用于将描述相同的 Symbol 变量指向同一个 Symbol

let a1 = Symbol.for('a');

let a2 = Symbol.for('a');

a1 === a2 // true

typeof a1 // "symbol"

typeof a2 // "symbol"

let a3= Symbol("a");

a1 === a3 // false

Symbol.keyFor():用来检测该字符串参数作为名称的 Symbol 值是否已被登记,返回一个已登记的

Symbol 类型值的 key

let a1 = Symbol.for("a");

Symbol.keyFor(a1); // "a"

let a2 = Symbol("a");

Symbol.keyFor(a2); // undefined

description:用来返回 Symbol 数据的描述:

// Symbol()定义的数据

let a = Symbol("acc");

a.description // "acc"

Symbol.keyFor(a); // undefined

// Symbol.for()定义的数据

let a1 = Symbol.for("acc");

a1.description // "acc"

Symbol.keyFor(a1); // "acc"

// 未指定描述的数据

let a2 = Symbol();

a2.description // undefined

使用场景一:对象添加属性

let n = Symbol('N');

let obj = {

    name: "hello world",

    age: 11,

    [n]: 100

};

使用场景二:给对象添加私有属性

const speak = Symbol();

class Person {

    [speak]() {

    console.log(123)

    }

}

let person = new Person()

console.log(person[speak]())