1.强制转换或手动转换
- Number()
- 原始类型
parseInt和Number区别是Number更严格,需要全部字符转换成数值,而parseInt更为宽松,逐个字符解析。parseInt('42 cats') // 42 Number('42 cats') // NaN
- 对象
valueOf优先于toStringvar obj = {x: 1}; Number(obj) // NaN // 等同于 if (typeof obj.valueOf() === 'object') { Number(obj.toString()); } else { Number(obj.valueOf()); }
- 原始类型
- String()
- 原始类型
- 数值:转为相应的字符串。
- 字符串:转换后还是原来的值。
- 布尔值:true转为字符串"true",false转为字符串"false"。
- undefined:转为字符串"undefined"。
- null:转为字符串"null"。
- 对象
- 数组:返回数组的字符串形式
String([1, 2, 3]) // "1,2,3"
- 数组以外的对象
规则与Number同,但valueOf和toString的顺序相反
- 数组:返回数组的字符串形式
- 原始类型
- Boolean()
可以将任意类型的值转化为布尔值- 规则:除以下五个值为false,其余结果全部为true
- undefined
- null
- 0(包含-0和+0)
- NaN
- ''(空字符串)
- 规则:除以下五个值为false,其余结果全部为true
2.自动转换
- 转数值
- 除加号运算符有可能将结果转为字符串以外,其余都自动转换为数值
- 转字符串
- 先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。
易出错的情况:var obj = { width: '100' };
- 先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。
- 转布尔值(见上方Boolean()规则)