JavaScript 为什么要有 Symbol 类型?
主要是防止属性的重名
众所周知的 symbols
除了自己创建的symbol,JavaScript还内建了一些在ECMAScript 5 之前没有暴露给开发者的symbol,它们代表了内部语言行为。它们可以使用以下属性访问:
迭代 symbols Symbol.iterator 一个返回一个对象默认迭代器的方法。被 for...of 使用。 Symbol.asyncIterator 一个返回对象默认的异步迭代器的方法。被 for await of 使用。 正则表达式 symbols Symbol.match 一个用于对字符串进行匹配的方法,也用于确定一个对象是否可以作为正则表达式使用。被 String.prototype.match() 使用。 Symbol.replace 一个替换匹配字符串的子串的方法. 被 String.prototype.replace() 使用。 Symbol.search 一个返回一个字符串中与正则表达式相匹配的索引的方法。被String.prototype.search() 使用。 Symbol.split 一个在匹配正则表达式的索引处拆分一个字符串的方法.。被 String.prototype.split() 使用。 其他 symbols Symbol.hasInstance 一个确定一个构造器对象识别的对象是否为它的实例的方法。被 instanceof 使用。 Symbol.isConcatSpreadable 一个布尔值,表明一个对象是否应该flattened为它的数组元素。被 Array.prototype.concat() 使用。 Symbol.unscopables 拥有和继承属性名的一个对象的值被排除在与环境绑定的相关对象外。 Symbol.species 一个用于创建派生对象的构造器函数。 Symbol.toPrimitive 一个将对象转化为基本数据类型的方法。 Symbol.toStringTag 用于对象的默认描述的字符串值。被 Object.prototype.toString() 使用。