介绍
在 JavaScript 中,每个属性和方法都有一个字符串类型的名称作为标识符。但是,有时候我们需要一种能够保证唯一性的标识符。为了解决这个问题,ES6 引入了一种新的原始数据类型 Symbol。在 ES7 中,Symbol 的功能更加强大,并加入了新的内置类型 Symbol.iterator。
Symbol
Symbol 是 ES6 新引入的一种原始数据类型。它的定义是一个唯一的、不可修改的值。Symbol 的使用方式有点类似于字符串,但是它的值是一个不可变的基本类型值。
创建 Symbol
在使用 Symbol 时,需要使用 Symbol 函数。Symbol 函数可以接收一个参数,这个参数是 Symbol 的描述信息。但是,这个描述信息只是为了方便调试使用,并没有其他作用。
let mySymbol = Symbol('my symbol'); console.log(mySymbol); // Symbol(my symbol)
使用 Symbol
Symbol 可以作为对象属性名,和字符串类型的属性名不同,使用 Symbol 做属性名不会和其他属性名冲突。
let obj = {}; let mySymbol = Symbol('my symbol'); obj[mySymbol] = 'hello'; console.log(obj[mySymbol]); // 'hello'
Symbol 的内置类型
ES6 内置了一些 Symbol 类型。
- Symbol.iterator:用于定义对象的默认迭代器方法。
- Symbol.hasInstance:用于定义对象的 instanceof 运算符。
- Symbol.toPrimitive:用于定义对象转换为基本数据类型的规则。
- Symbol.toStringTag:用于定义对象的 toString 方法返回的字符串。
- Symbol.isConcatSpreadable:用于定义数组在使用 concat 方法时如何展开。
Symbol.iterator
Symbol.iterator 是 ES7 中内置的新类型 Symbol。它用于定义对象的默认迭代器,主要用于支持 for...of 循环。
创建迭代器
要创建一个迭代器,需要定义一个方法,用 Symbol.iterator 作为键名返回该方法即可。
-- -------------------- ---- ------- ----- ---------- - --- --------------------------- - --------- -- - ----- -- ----- -- ----- -- -- --- ---- ----- -- ----------- - ------------------- - -- ------- -- - -- - -- -
可迭代对象
实现了 Symbol.iterator 方法的对象都可以称为可迭代对象。
const myIterable = {}; myIterable[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; console.log([...myIterable]); // [1, 2, 3]
创建自定义迭代器
我们也可以自己创建一个自定义的迭代器。只需要定义一个生成器函数,返回一个包含 next 方法的对象。next 方法返回一个带有 value 和 done 两个属性的对象,用来表示迭代器返回的值和是否迭代完成。
-- -------------------- ---- ------- -------- --------------------- - --- ----- - -- ------ - ----- ---------- - -- ------ - ------------- - ------ ------- --------------- ----- ------- - ---- - ------ ------ ------ - - -- - ----- ---------- - -------------------- ---- ------ ------------------------------- -- - ------ ---- ----- ----- - ------------------------------- -- - ------ ---- ----- ----- - ------------------------------- -- - ------ ---- ----- ----- - ------------------------------- -- - ----- ---- -
总结
Symbol 和 Symbol.iterator 是 JavaScript 中非常重要的元素,在前端开发中的应用非常广泛。了解它们的特性和用法,可以更好地理解和应用现代前端开发中的技术。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648016d448841e9894f961cc