在 ES6 中,引入了 Symbol 数据类型,它是一种新的原始数据类型,用于表示独一无二的值。在 ES10 中,Symbol 对象得到了更多的应用,可以用于创建私有属性、迭代器和自定义对象方法等方面。
创建 Symbol 对象
在 ES10 中,我们可以使用 Symbol()
函数来创建一个新的 Symbol 对象。每个 Symbol 对象都是独一无二的,因为它们的值是唯一的。
下面是一个简单的示例代码:
const mySymbol = Symbol(); console.log(typeof mySymbol); // "symbol"
使用 Symbol 对象创建私有属性
在 ES10 中,我们可以使用 Symbol 对象来创建私有属性,这些属性只能在对象内部访问,无法从外部访问。这可以保护对象的属性不被意外修改。
下面是一个示例代码:
// javascriptcn.com 代码示例 const person = { name: 'Tom', age: 20, [Symbol('gender')]: 'male' }; console.log(person.name); // "Tom" console.log(person.age); // 20 console.log(person[Symbol('gender')]); // undefined
在上面的代码中,我们使用了一个 Symbol 对象来创建一个私有属性 gender
,它无法从对象外部访问。
使用 Symbol 对象创建迭代器
在 ES6 中,我们可以使用 for...of
循环来遍历数组和字符串。在 ES10 中,我们可以使用 Symbol 对象来创建自定义的迭代器,以便更好地控制迭代过程。
下面是一个示例代码:
// javascriptcn.com 代码示例 const myArray = [1, 2, 3]; const mySymbol = Symbol.iterator; myArray[mySymbol] = function() { let index = 0; return { next: function() { return index < myArray.length ? { value: myArray[index++], done: false } : { done: true }; } }; }; for (const item of myArray) { console.log(item); }
在上面的代码中,我们使用了一个 Symbol 对象来创建一个迭代器。我们将一个自定义的 next()
方法添加到数组的 Symbol.iterator 属性中,以便在 for...of
循环中使用。
使用 Symbol 对象创建自定义对象方法
在 ES10 中,我们可以使用 Symbol 对象来创建自定义对象方法。这些方法可以像普通方法一样调用,但是它们是独立的,不会与其他方法冲突。
下面是一个示例代码:
// javascriptcn.com 代码示例 const mySymbol = Symbol(); const person = { name: 'Tom', age: 20, [mySymbol]: function() { console.log(this.name + ' is ' + this.age + ' years old.'); } }; person[mySymbol]();
在上面的代码中,我们使用了一个 Symbol 对象来创建一个自定义的对象方法。我们将这个方法添加到对象的 Symbol 属性中,以便在对象中调用。
总结
在 ES10 中,Symbol 对象得到了更多的应用,它可以用于创建私有属性、迭代器和自定义对象方法等方面。使用 Symbol 对象可以更好地保护对象的属性不被意外修改,更好地控制迭代过程,以及更好地创建独立的对象方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65654b91d2f5e1655de8ece2