类型转换

大多数情况下,运算符和函数会自动将赋给它们的值转换为正确的类型
比如,alert 自动将值转换为字符串进行显示
在特殊情况下,我们需要将值显式的转换为所期望的类型

字符串转换

1
2
3
4
5
let num = 14;
console.log(typeof num); // number

num = String(num); // 14 - 字符串
console.log(typeof num); // string

字符串的转换非常明显,false -> ‘false’ null -> ‘null’

数字类型转换

在算术表达式中,会自动进行 number 类型转换

1
2
3
4
console.log('6' / '2'); // 3 string -> number
// 当然特殊的 + 法时表达式中有字符串是不会转换的
let result = "33" + 2;
console.log(result); // 332

js 中可以使用 Number(value) 显式的将这个 value 转换为 number 类型

1
2
3
4
5
6
7
8
9
10
11
let string = '32';

console.log(typeof string); // string

let num = Number(string);

console.log(typeof num); // number

// 如果字符串不是一个有效的数字,转换结果是 NaN,注意 NaN 的类型也是 number,仅仅表示不是一个有效的数字

console.log(typeof NaN); // number

number转换的规则

规则
undefinedNaN
null0
truefalse1 and 0
string去掉首尾空格后的纯数字字符串中含有数字,如果剩余字符串为空,则转换结果为0,否则,将会聪剩余字符串中读取数字,类型转换出现错误后,返回 NaN
1
2
3
4
5
6
7
8
console.log(Number("            000")); // 0
console.log(Number("11111111111*")); // NaN
console.log(Number(true)); // 1
console.log(Number(false)); // 0


// 注意虽然 null == undefined 但是 Number(undefined) = NaN
console.log(Number(undefined)); // NaN

布尔类型转换

布尔类型转换通过 Boolean() 将其他类型转换为布尔类型,布尔类型转换规则如下:

  1. nullundefined0""NaN,转换为 false
  2. 其他转换为 true
  3. 注意 "0"" " 也转换为 true