强制转换
主要使用 Number、String 和 Boolean 三个构造函数,将各种类型的值转换成数字、字符串或者布尔值。
自动转换
暗示什么类型的值,就调用该类型的转换函数。尽量避免自动转化。
通常:
- Boolean:if
- String:+(至少有一个是 String 类型); Date 对象
- Number:除“+”外的运算符,包括一元;无暗示
转化步骤
不同版本的 ES 规范,细节上有些不同,步骤如下
- 基本类型转换;
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
- 对于非基本类型,调用 ToPrimitive 方法。
- 转 nubmer,先调用.valueOf(),如果结果是基本类型,返回结果,否则调用.toString(),结果是基本类型,返回结果,否则抛 TypeError。
- 转 string,先调用.toString(),如果结果是基本类型,返回结果,否则调用.valueOf(),结果是基本类型,返回结果,否则抛 TypeError。
- 转 boolean,true。