0%

javascript-object-to-primitive

Introduction

JS中Object类型转换为Primitive类型的过程,称为ToPrimitive操作。这篇文章主要介绍一下这个过程。

转换流程

  1. 调用对象的[Symbol.toPrimitive]方法,如果返回的是Primitive类型,则返回。
  2. 否则,调用对象的valueOf方法,如果返回的是Primitive类型,则返回。
  3. 否则,调用对象的toString方法,如果返回的是Primitive类型,则返回。
  4. 否则,抛出TypeError异常。

[]与{}

注意:[]和{}在转换为Primitive类型时,会有很大的不同。

  1. 转换为Number类型时,[]会转换为0,{}会转换为NaN。
  2. 转换为String类型时,[]会转换为'',{}会转换为'[object Object]'。
  3. 转换为Boolean类型时,[]会转换为false,{}会转换为true。

之所以造成这么大的区别就是因为[]和{}的和toString()方法的返回值不同。

  • []的toString()方法返回的是'',而valueOf()方法返回的是[]。
  • {}的toString()方法返回的是'[object Object]',而valueOf()方法返回的是{}。

因为[]能转换为空字符串,而空字符串可以转换为0或false,所以[]能转换为0或false。而{}则不能。

References

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#type_coercion
  2. https://tc39.es/ecma262/multipage/abstract-operations.html#sec-toprimitive