原始类型:Symbol,用于创建必须通过Symbol才能引用的属性,提供了一些私有性和不易覆盖的特性。
1、创建Symbol
symbol在创建的时候,可以接受一个参数,用来描述这个Symbol的文本字符串。
2、Symbol的使用方法
所有使用可计算属性名的地方,都可以使用Symbol,看以下代码:
3、Symbol共享体系
如果想要创建一个共享的Symbol,就使用Symbol.for()方法,它接受一个参数,用来创建Symbol的字符串标识符。Symbol.for()方法首先在全局Symbol注册部查找是否存在Symbol,存在则直接返回,不存在则创建一个新的。例如一下代码:
4、Symbol与类型强制转换
Symbol不能强制转换成字符串和数字类型。例如一下代码:
5、Symbol属性检索
Object.getOwnPropertySymbols()方法来检索对象中的Symbol属性。例如:
6、通过well-known Symbol暴露内部操作
(1)Symbol.hasInstance 一个在执行instanceof时调用的内部方法,用于检测对象的继承信息。
(2)Symbol.isConcatSpreadable 一个布尔值,用于表示当传递一个集合作为Array.prototype.concat()方法的参数时,是否英爱将集合内的元素规整到同一层级。
(3)Symbol.iterator 一个繁华迭代器的方法。
(4)Symbol.match 一个调用String.prototype.match()方法时调用的方法,用于比较字符串。
(5)Symbol.replace 一个调用String.prototype.replace()方法时调用的方法,用于替换字符串的子串。
(6)Symbol.search 一个调用String.prototype.search()方法时调用的方法,用于在字符串中定位子串。
(7)Symbol.species 用于创建派生对象的构造函数。
(8)Symbol.split 一个在调用String.prototype.split()方法时调用的方法,用于分割字符串。
(9)Symbol.toPrimitive 一个返回对象原始值的方法。
(10)Symbol.toStringTag 一个在调用Object.prototype.toString()方法时使用的字符串,用户创建对象描述。
(11)Symbol.unscopables 一个定义了一些不可被with语句引用的对象属性名称的对象集合。
重写这些方法,可以改变对象内部的默认行为,从而可以实现一些自定义的方法和行为。