强制转换
主要使用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。