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()方法返回的是{}

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

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