什么是 symbol、有什么用处?
题干
symbol
类型有什么用处
题解
symbol
是 ES6
新增的一种基本数据类型。
Symbol()
函数会返回 symbol
类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的 symbol
注册。
symbol
类型的值是唯一的,可以用来作为对象属性的标识符,避免属性名冲突或被意外访问。symbol
类型的值也可以用来表示一些内部语言行为,例如迭代器、正则表达式等。
symbol
类型的值可以通过 Symbol()
函数创建,也可以通过 Symbol.for()
方法从全局 symbol
注册表中获取或创建。symbol
类型的值不能用 new
运算符创建,也不能转换为其他类型。
作为对象属性 key
时,symbol
无法被 for
循环遍历,
可以通过 Object.getOwnPropertySymbols()
遍历对象中的 symbol
属性,返回对象中只包含 symbol
类型 key
的数组。
可以通过 Reflect.ownKeys()
遍历对象中的 symbol
属性,返回对象中所有类型 key
的数组(包含 symbol
)。
注意:
Symbol
是基本数据类型,不要加new
类型转化的时候不可转化为数值
不能做任何运算
symbol
生成的值作为属性或者方法的时候,要保存下来,否则后续无法使用for
循环遍历对象的时候无法遍历出symbol
属性和方法
使用场景:
定义对象的私有属性或方法,只有通过对应的
symbol
值才能访问定义对象的特殊行为,例如
Symbol.iterator
用于定义对象的默认迭代器定义模块的导出接口,例如
Symbol.toStringTag
用于定义对象的默认描述