强制转换

主要使用Number、String和Boolean三个构造函数,将各种类型的值转换成数字、字符串或者布尔值。

自动转换

暗示什么类型的值,就调用该类型的转换函数。尽量避免自动转化。

通常:

转化步骤

不同版本的ES规范,细节上有些不同,步骤如下

  1. 基本类型转换;
    Number String Boolean
    undefined NaN "undefined" false
    null +0 "null" false
    number NaN -> "NaN",+0或-0 -> "0",其他做相应转换 +0、-0、NaN -> false,其他 -> true
    string 按UTF‐16编码点,能解析成StringNumericLiteral返回相应数值,否则NaN 空字符串 -> false,其他true
    boolean true -> 1,false -> +0 "true"或"false"
    symbol 抛TypeError 抛TypeError true

  2. 对于非基本类型,调用ToPrimitive方法。
    • 转nubmer,先调用.valueOf(),如果结果是基本类型,返回结果,否则调用.toString(),结果是基本类型,返回结果,否则抛TypeError。
    • 转string,先调用.toString(),如果结果是基本类型,返回结果,否则调用.valueOf(),结果是基本类型,返回结果,否则抛TypeError。
    • 转boolean,true。