Introduction
JS中Object类型转换为Primitive类型的过程,称为ToPrimitive操作。这篇文章主要介绍一下这个过程。
转换流程
- 调用对象的
[Symbol.toPrimitive]方法,如果返回的是Primitive类型,则返回。 - 否则,调用对象的
valueOf方法,如果返回的是Primitive类型,则返回。 - 否则,调用对象的
toString方法,如果返回的是Primitive类型,则返回。 - 否则,抛出TypeError异常。
[]与{}
注意:[]和{}在转换为Primitive类型时,会有很大的不同。
- 转换为Number类型时,
[]会转换为0,{}会转换为NaN。 - 转换为String类型时,
[]会转换为'',{}会转换为'[object Object]'。 - 转换为Boolean类型时,
[]会转换为false,{}会转换为true。
之所以造成这么大的区别就是因为[]和{}的和toString()方法的返回值不同。
[]的toString()方法返回的是'',而valueOf()方法返回的是[]。{}的toString()方法返回的是'[object Object]',而valueOf()方法返回的是{}。
因为[]能转换为空字符串,而空字符串可以转换为0或false,所以[]能转换为0或false。而{}则不能。