Symbol 是 ES6 新推出的一种基本类型,它表示独一无二的值
它可以选择接受一个字符串作为参数或者不传,但是相同参数的两个 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]())