Symbol
是 ES6 (ECMAScript 2015) 中引入的一种新的原始数据类型。每个从 Symbol
构造函数返回的 Symbol
值都是唯一的。Symbol
的主要用途是为对象属性提供唯一的标识符,以避免属性名的冲突。
创建 Symbol
可以通过调用 Symbol
函数创建一个新的 Symbol。注意,Symbol
是原始类型,不是对象,所以不能使用 new
关键字。
Symbol 的描述
Symbol 可以有一个可选的字符串描述,这个描述仅用于调试,不影响其唯一性。
使用 Symbol 作为对象属性
Symbol 通常用于为对象定义唯一的属性,避免属性名冲突。
遍历对象中的 Symbol 属性
默认情况下,for...in
循环和 Object.keys
方法无法枚举对象的 Symbol 属性。不过,可以使用 Object.getOwnPropertySymbols
方法获取对象的所有 Symbol 属性。
内建 Symbol
内建 Symbol 是 JavaScript 中的一种特殊类型的 Symbol,提供了一些内置的行为和特性。这些内建 Symbol 可以用来改变对象的默认行为。以下是一些常见的内建 Symbol 及其用法。
Symbol.iterator
用于定义对象的默认迭代器。一个对象要被 for...of
循环迭代,它必须实现 Symbol.iterator
方法。
Symbol.toPrimitive
用于定义对象被转换为原始值时的行为。该方法接收一个提示参数(hint
),表示转换的上下文,可以是 "number"
、"string"
或 "default"
。
Symbol.toStringTag
用于自定义对象的 Object.prototype.toString
方法的返回值。
Symbol.hasInstance
用于自定义 instanceof
运算符的行为。
Symbol.species
用于定义一个对象的构造函数,用于派生对象。
Symbol.match
用于定义字符串匹配时的自定义行为。
Symbol.replace
用于定义字符串替换时的自定义行为。
Symbol.search
用于定义字符串搜索时的自定义行为。
Symbol.split
用于定义字符串拆分时的自定义行为。
Symbol.isConcatSpreadable
用于自定义对象在数组 concat
方法中的行为。