返回
ES6 - Symbol:独特的字符串,不可重复的ID
前端
2023-11-14 16:45:24
ES6 中的 Symbol
ES6 中的 Symbol 是一种新的原始数据类型,它表示独一无二的值,可以被用作对象的属性名或函数名,以确保不会与其他属性或函数名冲突。Symbol 是一个不可变的值,一旦创建就不能被更改。
Symbol 的定义
Symbol 可以通过 Symbol() 函数来创建,也可以通过 Symbol.for() 函数来获取已经存在的 Symbol。Symbol() 函数会创建一个新的 Symbol 值,而 Symbol.for() 函数则会尝试获取已经存在的 Symbol 值。如果该 Symbol 值不存在,则会创建一个新的 Symbol 值并返回。
const symbol1 = Symbol();
const symbol2 = Symbol();
console.log(symbol1 === symbol2); // false
Symbol 的特性
Symbol 具有以下特性:
- Symbol 是一个独一无二的值,即使两个 Symbol 的值看起来相同,它们也是不同的。
- Symbol 是一个不可变的值,一旦创建就不能被更改。
- Symbol 可以被用作对象的属性名或函数名。
- Symbol 可以通过 Symbol() 函数或 Symbol.for() 函数来创建。
Symbol 的用法
Symbol 可以被用于以下场景:
- 作为对象的属性名,以确保不会与其他属性名冲突。
- 作为函数名,以确保不会与其他函数名冲突。
- 作为 Map 或 Set 的键,以确保键的唯一性。
const symbol1 = Symbol();
const object = {
[symbol1]: 'foo'
};
console.log(object[symbol1]); // 'foo'
const symbol1 = Symbol();
const map = new Map();
map.set(symbol1, 'foo');
console.log(map.get(symbol1)); // 'foo'
Symbol 的实际应用场景
Symbol 可以被用于以下实际应用场景:
- 创建私有属性。
- 创建私有方法。
- 创建私有变量。
- 创建独一无二的键。
// 创建私有属性
class Person {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
const person = new Person('John Doe');
console.log(person.#name); // undefined
console.log(person.getName()); // 'John Doe'
// 创建私有方法
class Person {
#getName() {
return 'John Doe';
}
getName() {
return this.#getName();
}
}
const person = new Person();
console.log(person.#getName()); // undefined
console.log(person.getName()); // 'John Doe'
// 创建私有变量
let #name = 'John Doe';
function getName() {
return #name;
}
console.log(#name); // undefined
console.log(getName()); // 'John Doe'
// 创建独一无二的键
const symbol1 = Symbol();
const map = new Map();
map.set(symbol1, 'foo');
console.log(map.get(symbol1)); // 'foo'
结论
Symbol 是 ES6 中一种新的原始数据类型,它表示独一无二的值,可以被用作对象的属性名或函数名,以确保不会与其他属性或函数名冲突。Symbol 具有以下特性:独一无二、不可变、可作为对象的属性名或函数名、可通过 Symbol() 函数或 Symbol.for() 函数来创建。Symbol 可以被用于以下实际应用场景:创建私有属性、创建私有方法、创建私有变量、创建独一无二的键。