1.强制转换或手动转换

  • Number()
    • 原始类型
      parseInt和Number区别是Number更严格,需要全部字符转换成数值,而parseInt更为宽松,逐个字符解析。
      parseInt('42 cats') // 42
      Number('42 cats') // NaN
    • 对象
      valueOf优先于toString
      var 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
      • ''(空字符串)

2.自动转换

  • 转数值
    • 除加号运算符有可能将结果转为字符串以外,其余都自动转换为数值
  • 转字符串
    • 先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。
      易出错的情况:
      var obj = {
      width: '100'
      };
  • 转布尔值(见上方Boolean()规则)