7月22号-说说你对 toPrimitive 的理解

37 阅读2分钟

答1:

Symbol.toPrimitive用于将对象转换为原始值,在运算操作中,如果一个操作数a是对象,JS会判断另一个操作数b的类型, 调用对象的 valueOf 和 toString 方法把 对象a 转换为一个字符串或数字。也可以自定义 Symbol.toPrimitive 方法覆盖默认的 toPrimitive 行为 。

答2:

ToPrimitive 是一个抽象操作,用于将一个值转换为原始值(primitive value),即字符串、数字或布尔值。 在 JavaScript 中,当需要将一个非原始值用作原始值时,会自动调用 ToPrimitive 操作。例如,在使用加法运算符时,如果其中一个操作数不是原始值,则会将其转换为原始值,这就是通过调用 ToPrimitive 来实现的。 ToPrimitive 操作的实现方式如下:

  • 如果该值已经是原始类型,则直接返回该值。
  • 如果该值是对象,则按照以下步骤进行转换:
    • 调用 valueOf() 方法并返回结果,如果结果是原始类型则直接返回该结果。
    • 调用 toString() 方法并返回结果,如果结果是原始类型则直接返回该结果。
  • 如果都不是原始类型,则抛出 TypeError 异常。

什么是原始值?

在JavaScript中,原始值(primitive value)是指那些不可变的、简单的数据类型,主要包括以下几种:

  • null:表示空值,是一个特殊的原始值,它表示一个空的对象指针。在类型判断中,typeof null会返回“object”,这在JavaScript中是一个历史遗留问题。
  • undefined:表示变量未定义或函数未返回值等,表示“缺少值”。typeof undefined返回“undefined”。
  • boolean:即布尔值,只有true和false两个值,用于表示逻辑上的真和假。
  • number:表示数字类型,可以是整数、小数、正数、负数等,包括特殊值如Infinity(无穷大)、-Infinity(负无穷大)和NaN(非数字)。
  • string:表示字符串类型,由零个或多个字符组成,字符可以是字母、数字、符号、空格等。
  • symbol:ES6引入的一种新的原始数据类型,用于创建唯一的、不可变的值,常用于对象的属性名,以保证属性名的唯一性。
  • bigint:ES2020引入的一种新的原始数据类型,用于表示任意精度的整数,以避免数字精度丢失的问题。