强制转换

主要使用 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。