返回

Symbol 入门:揭开ES6的神秘面纱

前端

在ES6中,Symbol类型是一个全新的原始类型,它可以用来创建唯一且不可变的值。Symbol值通常用于作为对象的属性名或作为函数的参数,以便在不同的对象或函数之间进行区分。

1. 创建Symbol值

Symbol值可以通过Symbol()函数来创建,该函数不接受任何参数,直接调用即可。例如:

const symbol1 = Symbol();
const symbol2 = Symbol();

以上代码创建了两个Symbol值,symbol1和symbol2。这两个Symbol值是唯一的,这意味着它们不会与任何其他Symbol值相同,即使它们看起来相同。

2. 使用Symbol值

Symbol值可以通过点号运算符(.)来访问对象的属性。例如:

const obj = {
  [symbol1]: 'foo',
  [symbol2]: 'bar'
};

console.log(obj[symbol1]); // 输出:foo
console.log(obj[symbol2]); // 输出:bar

以上代码创建了一个对象obj,该对象有两个Symbol属性,symbol1和symbol2。这两个Symbol属性的值分别是'foo'和'bar'。我们可以通过点号运算符来访问这两个属性,并输出它们的值。

Symbol值也可以作为函数的参数来使用。例如:

function func(symbol) {
  console.log(symbol);
}

func(symbol1); // 输出:Symbol(Symbol.iterator)

以上代码创建了一个函数func,该函数接受一个Symbol参数。当我们调用func函数时,我们将symbol1作为参数传递给它。函数func输出symbol1的值,即Symbol(Symbol.iterator)。

3. Symbol的注意事项

Symbol值有一些需要注意的地方:

  • Symbol值不是对象,无法为其添加属性。
  • Symbol值不能与其他类型的值进行运算,会报错。但是,Symbol值可以与其他Symbol值进行比较,使用严格相等运算符(===)和不严格相等运算符(!==)。
  • Symbol值不能用作对象的属性名,只能用作对象的符。
  • Symbol值不能用作函数的参数,只能用作函数的返回值。

4. 结论

Symbol类型是ES6中一个非常有用的新类型,它可以用来创建唯一且不可变的值。Symbol值通常用于作为对象的属性名或作为函数的参数,以便在不同的对象或函数之间进行区分。