Symbol 是 JavaScript 中的一种基本数据类型,它的主要特点是每个 Symbol 值都是唯一的,这意味着你可以创建一个标识符,它永远不会与其他任何标识符冲突。这使得 Symbol 非常适合作为对象属性的键,特别是当你想要创建一些不会与其他属性冲突的属性时。
你可以使用 Symbol() 函数来创建一个 Symbol 值:
let sym1 = Symbol();
let sym2 = Symbol('description'); // 可选的字符串描述
注意,Symbol 函数不能与 new 关键字一起使用。
Symbol 的常用方法包括:
Symbol.for(key): 这个方法会首先检查是否存在一个与给定键关联的Symbol值。如果存在,则返回该Symbol值,否则,它将创建一个新的Symbol值,并与给定的键关联。
let sym1 = Symbol.for('key'); // 创建或获取一个与 'key' 关联的 Symbol
let sym2 = Symbol.for('key'); // 获取已存在的 Symbol
console.log(sym1 === sym2); // 输出: true
Symbol.keyFor(sym): 这个方法返回一个与Symbol关联的字符串键。如果Symbol没有关联的键,则返回undefined。
let sym = Symbol.for('key');
console.log(Symbol.keyFor(sym)); // 输出: 'key'
Symbol.iterator: 这是一个内置的Symbol值,它被用作一个默认的迭代器方法。当一个对象需要被迭代(例如,在一个for...of循环中)时,它的@@iterator方法会被调用。
let arr = [1, 2, 3];
let iterator = arr[Symbol.iterator]();
console.log(iterator.next()); // 输出: { value: 1, done: false }
console.log(iterator.next()); // 输出: { value: 2, done: false }
console.log(iterator.next()); // 输出: { value: 3, done: false }
console.log(iterator.next()); // 输出: { value: undefined, done: true }
这些是 Symbol 的基本概念和常用方法。Symbol 是一个非常强大的工具,它可以帮助你创建独一无二的标识符,避免命名冲突,并控制对象的迭代行为。