Skip to content

JavaScript 中的 symbol

如何理解 JavaScript 中的symbol

Symbol 是 ES6 新增的一种原始数据类型,用于表示唯一的、不可变的值。Symbol 值通过 Symbol 函数创建,每个 Symbol 值都是唯一的,可以用作对象属性的键名,保证不会与其他属性名冲突。

Symbol 值可以作为对象的属性名,但是不能使用点运算符访问,必须使用方括号运算符。另外,Symbol 值也可以用于定义对象的私有属性,这些属性不会被遍历到,也不会被意外覆盖。

例如:

javascript
const sym = Symbol('foo');
const obj = {
  [sym]: 'bar'
};
console.log(obj[sym]); // 输出: "bar"
const sym = Symbol('foo');
const obj = {
  [sym]: 'bar'
};
console.log(obj[sym]); // 输出: "bar"

Symbol 值还有一个重要的特点,就是可以用于定义对象的迭代器,通过定义 Symbol.iterator 方法,可以使对象具备可迭代性,可以使用 for...of 循环遍历。

例如:

javascript
const obj = {
  [Symbol.iterator]: function* () {
    yield 1;
    yield 2;
    yield 3;
  }
};

for (const value of obj) {
  console.log(value); // 输出: 1 2 3
}
const obj = {
  [Symbol.iterator]: function* () {
    yield 1;
    yield 2;
    yield 3;
  }
};

for (const value of obj) {
  console.log(value); // 输出: 1 2 3
}

总之,Symbol 是一种非常有用的数据类型,可以用于定义唯一的属性名或迭代器,为 JavaScript 提供更加灵活的编程方式。