Javascript中的数据类型转换有哪些?它们的规则是什么?

在 JavaScript 中,数据类型的转换主要发生在以下几种情况:

  1. 不同类型的值进行运算
  2. 不同类型的值进行比较
  3. 使用typeof操作符获取变量类型
  4. 显示进行类型转换

数据类型的转换遵循以下规则:

  1. 字符串拼接会执行字符串类型转换:例如 1 + ‘2’ => ’12’
  2. 相加的两侧,只要有一个是字符串,则另一个也会转为字符串进行拼接:例如 1 + 2 + ‘3’ => ’33’
  3. 减、乘、除运算会执行数值类型转换
  4. 相等/不相等比较会依据比较运算符执行类型转换:
  • == 会执行类型转换再比较:1 == ‘1’ => true
  • === 不会执行类型转换,直接比较类型和值:1 === ‘1’ => false
  1. typeof 一律返回字符串:typeof 1 => ‘number’
  2. Boolean会把除了0、NaN、”、null、undefined以外的值转为true,其他转为false
  3. Number可以将字符串、布尔值转为数字,null和undefined转为NaN
  4. String可以将任意类型的值转为字符串
  5. Object会将原始类型的值转为对应的包装对象

例如:

1 + '2'     // '12'  字符串拼接,执行字符串转换
1 - '2'     // -1   减法运算,执行数值转换 
1 == '1'    // true  使用==,执行类型转换
1 === '1'   // false 使用===,不执行类型转换  
typeof 1    // 'number'
typeof '1'  // 'string'

Boolean(0)   // false
Boolean(1)   // true
Boolean('')  // false

Number('1')    // 1  
Number(true)   // 1
Number(null)   // 0
Number(undefined) // NaN

String(1)     // '1'
String(true)  // 'true'

let a = 1;
let b = new Number(a); // 使用Number创建对象

所以总结来说,JavaScript 中的数据类型转换主要遵循:

  1. 运算和比较时,会根据操作符执行类型转换
  2. typeof 总是返回字符串
  3. Boolean、Number、String可以执行显式类型转换
  4. Object会将原始类型的值转换为对象

在代码中,我们应尽量避免不必要的类型转换,特别是 == 运算,这可以让程序行为更加清晰可预测。