浅谈JavaScript中的类型转换

153 阅读3分钟

这篇文章浅谈一下 JavaScript 中的类型转换。

在编程中,类型转换是将一种类型的数据转换为另一种类型的过程。例如:将 String 数据转换为 Number。 JavaScript 中有两种类型的类型转换:

  • 隐式转换 - 自动类型转换
  • 显式转换 - 手动类型转换

JavaScript 隐式转换

1. 隐式转换为字符串

在某些情况下,JavaScript 会自动将一种数据类型转换为另一种(正确的类型)。这称为隐式转换。 例如隐式转换为String:

// 使用+号使数字转换为字符串类型
let result;

result = '3' + 2; 
console.log(result) // "32"

result = '3' + true; 
console.log(result); // "3true"

result = '3' + undefined; 
console.log(result); // "3undefined"

result = '3' + null; 
console.log(result); // "3null"

注意:将数字添加到字符串时,JavaScript 会在连接之前将数字转换为字符串

2. 隐式转换为数字

// 数字字符串使用 - , / , * 转换为数字类型运算

let result;

result = '4' - '2'; 
console.log(result); // 2

result = '4' - 2;
console.log(result); // 2

result = '4' * 2;
console.log(result); // 8

result = '4' / 2;
console.log(result); // 2

3. 非数字字符串结果为 NaN

// 非数字字符串使用 - , / , * 转换为 NaN

let result;

result = 'hello' - 'world';
console.log(result); // NaN

result = '4' - 'hello';
console.log(result); // NaN

4. 隐式布尔转换为数字

// 如果使用布尔值,true 为 1,false 为 0

let result;

result = '4' - true;
console.log(result); // 3

result = 4 + true;
console.log(result); // 5

result = 4 + false;
console.log(result); // 4

注意:JavaScript 认为 0 为假,所有非零数字为真。而且,如果将 true 转换为数字,则结果始终为 1。

5. null 转换为数字

// 与 number 一起使用时 null 为 0
let result;

result = 4 + null;
console.log(result);  // 4

result = 4 - null;
console.log(result);  // 4

6. undefined 与数字、布尔值或 null 一起使用

// 带有数字、布尔值或空值与undefined 算术运算给出 NaN

let result;

result = 4 + undefined;
console.log(result);  // NaN

result = 4 - undefined;
console.log(result);  // NaN

result = true + undefined;
console.log(result);  // NaN

result = null + undefined;
console.log(result);  // NaN

JavaScript 显式转换

可以根据需要将一种数据类型转换为另一种数据类型。手动执行的类型转换称为显式类型转换。 在 JavaScript 中,显式类型转换是使用内置方法完成的。

1. 显式转换为数字

要将数字字符串和布尔值转换为数字,可以使用 Number()。例如,

let result;

// string to number
result = Number('324');
console.log(result); // 324

result = Number('324e-1')  
console.log(result); // 32.4

// boolean to number
result = Number(true);
console.log(result); // 1

result = Number(false);
console.log(result); // 0

在 JavaScript 中,空字符串和空值返回 0。例如,

let result;
result = Number(null);
console.log(result);  // 0

let result = Number(' ')
console.log(result);  // 0

如果字符串是无效数字,则结果将为 NaN。例如,

let result;
result = Number('hello');
console.log(result); // NaN

result = Number(undefined);
console.log(result); // NaN

result = Number(NaN);
console.log(result); // NaN

还可以使用 parseInt()parseFloat()、一元运算符 +Math.floor() 从字符串生成数字。例如,

let result;
result = parseInt('20.01');
console.log(result); // 20

result = parseFloat('20.01');
console.log(result); // 20.01

result = +'20.01';
console.log(result); // 20.01

result = Math.floor('20.01');
console.log(result); // 20

2. 显式转换为字符串

要将其他数据类型转换为字符串,可以使用 String()toString()。例如,

//number to string
let result;
result = String(324);
console.log(result);  // "324"

result = String(2 + 4);
console.log(result); // "6"

//other data types to string
result = String(null);
console.log(result); // "null"

result = String(undefined);
console.log(result); // "undefined"

result = String(NaN);
console.log(result); // "NaN"

result = String(true);
console.log(result); // "true"

result = String(false);
console.log(result); // "false"

// using toString()
result = (324).toString();
console.log(result); // "324"

result = true.toString();
console.log(result); // "true"

注意: String() 接受 null 和 undefined 并将它们转换为字符串。但是,当传递 null 时,toString() 会出错

3. 显式转换为布尔值

要将其他数据类型转换为布尔值,可以使用 Boolean()。 在 JavaScript 中,undefinednull0NaN'' 转换为 false。例如,

let result;
result = Boolean('');
console.log(result); // false

result = Boolean(0);
console.log(result); // false

result = Boolean(undefined);
console.log(result); // false

result = Boolean(null);
console.log(result); // false

result = Boolean(NaN);
console.log(result); // false

所有其他值都为 true。例如,

result = Boolean(324);
console.log(result); // true

result = Boolean('hello');
console.log(result); // true

result = Boolean(' ');
console.log(result); // true

最后附上JavaScript 类型转换表

该表显示了 JavaScript 中不同值到字符串、数字和布尔值的转换。

字符串转换数字转换布尔值转换
1"1"1true
0"0"0false
"1""1"1true
"0""0"0true
"ten""ten"NaNtrue
true"true"1true
false"false"0false
null"null"0false
undefined"undefined"NaNfalse
''""0false
' '" "0true

如有缺漏欢迎补充,希望大家coding愉快