在ES6及以后的版本中,定义了一系列内置的 Symbol 值,这些值用于提供对象的内置特性。以下是一些常用的内置 Symbol 值:
Symbol.hasInstance:
一个构造函数的 Symbol.hasInstance 方法会被 instanceof 运算符调用,以确定一个构造函数是否有给定的原型对象作为其实例。
Symbol.isConcatSpreadable:
一个对象的 Symbol.isConcatSpreadable 属性会告诉 Array.prototype.concat() 方法是否可以将该对象展开为数组元素。
Symbol.iterator:
一个对象的 Symbol.iterator 属性会提供一个迭代器,用于迭代对象中的元素。这是实现可迭代协议的关键。
Symbol.match:
一个对象的 Symbol.match 方法会被 String.prototype.match() 方法调用,用于确定一个字符串是否匹配一个正则表达式。
Symbol.replace:
一个对象的 Symbol.replace 方法会被 String.prototype.replace() 方法调用,用于替换字符串中匹配的模式。
Symbol.search:
一个对象的 Symbol.search 方法会被 String.prototype.search() 方法调用,用于在字符串中搜索一个模式。
Symbol.split:
一个对象的 Symbol.split 方法会被 String.prototype.split() 方法调用,用于将字符串分割成子字符串数组。
Symbol.species:
一个构造函数的 Symbol.species 属性会返回一个新构造函数,用于创建派生对象。
Symbol.toPrimitive:
一个对象的 Symbol.toPrimitive 方法会被 ToPrimitive 抽象操作调用,用于将对象转换为一个原始值。
Symbol.toStringTag:
一个对象的 Symbol.toStringTag 属性会提供一个默认字符串描述,用于 Object.prototype.toString() 方法。
Symbol.unscopables:
一个对象的 Symbol.unscopables 属性包含了一个对象,其属性指定了哪些属性应当被排除在 with 语句的作用域之外。
这些内置 Symbol 值为 JavaScript 的内置操作提供了标准化的属性和方法,使得开发者可以更精确地控制对象的行为。使用这些 Symbol 值,开发者可以确保他们的代码与 JavaScript 引擎的内置行为保持一致。