js隐式转换,+[]转换为0,+{}转换为NaN

619 阅读1分钟

js中,对象在转换为原始类型的时候,会调用内置的toPrimitive()函数,转换的过程如下:

  1. 本身已经是原始类型,直接返回这个值,
  2. 调用valueOf()方法,如果结果是原始值,那么返回这个值,
  3. 调用toString()方法,如果结果是原始值,那么返回这个值,
  4. 否则,抛出错误。

空数组和空对象在进行类型转换时,都会进行以上步骤,且两者都不是原始值,所以会直接调用valueOf()方法,简单的返回两者本身,都不是原始值;

继而会调用toString()方法,空数组得到的结果的‘’空字符串,空对象得到的结果则是字符串'[object Object]';

最后,+号前置会将元素转换为number类型,空字符串‘’转换为0,字符串'[object Object]'则转换为了NaN。