Skip to content
快看这页儿写了啥...

什么是 symbol、有什么用处?

题干

  • symbol 类型

  • 有什么用处

题解

symbolES6 新增的一种基本数据类型。

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 用于定义对象的默认描述

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐