返回

ES6深入浅出(三)之Symbol/集合

前端

欢迎来到ES6深入浅出系列文章的第三篇,今天我们将探讨Symbol和集合这两大重要特性。

Symbol

Symbol是一种新的原始类型,它允许您创建唯一的标识符,这些标识符不能被其他值(包括其他Symbol)重新分配。这使得它们非常适合用作对象的属性键,因为您可以确保没有其他对象拥有相同的属性键。

Symbol值可以使用Symbol()函数创建,也可以使用Symbol.for()函数创建。Symbol.for()函数允许您创建一个全局Symbol值,这意味着它可以在任何地方使用,即使它是在另一个脚本中创建的。

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

console.log(symbol1 === symbol2); // false

Symbol值也可以用作对象的属性键。

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

console.log(obj[symbol1]); // 'foo'
console.log(obj[symbol2]); // 'bar'

集合

集合是一种新的数据结构,它允许您存储唯一的值。与数组不同,集合中的值不能重复。

集合可以使用Set()函数创建。

const set = new Set();

set.add('foo');
set.add('bar');
set.add('baz');

console.log(set); // Set { 'foo', 'bar', 'baz' }

集合也可以使用数组作为参数创建。

const set = new Set(['foo', 'bar', 'baz']);

console.log(set); // Set { 'foo', 'bar', 'baz' }

集合中的值可以使用has()方法检查。

const set = new Set(['foo', 'bar', 'baz']);

console.log(set.has('foo')); // true
console.log(set.has('qux')); // false

集合中的值可以使用delete()方法删除。

const set = new Set(['foo', 'bar', 'baz']);

set.delete('foo');

console.log(set); // Set { 'bar', 'baz' }

集合中的值可以使用forEach()方法遍历。

const set = new Set(['foo', 'bar', 'baz']);

set.forEach((value) => {
  console.log(value);
});

// 输出:
// foo
// bar
// baz

总结

Symbol和集合都是ES6中非常有用的特性。Symbol允许您创建唯一的标识符,而集合允许您存储唯一的值。这使得它们非常适合用于各种任务,例如:

  • 创建对象的私有属性
  • 实现缓存
  • 创建集合

我希望这篇文章对您有所帮助。如果您有任何问题,请随时在评论中留言。