JS 简单数据类型的显示转换

126 阅读3分钟

JS 类型转换

前言 ES6之前,js有6种数据类型

  • 基本数据类型(Primitive types):
    • Number、Null、Undefined、String、Boolean
    • 赋值方式:拷贝式赋值
  • 复杂数据类型:
    • Object
    • 赋值方式:引用式赋值

为何JS可以进行类型转换?

因为JS是弱类型语言,变量的类型是可以改变的。在JS的执行机制中,大致可以分为两个阶段,编译阶段执行阶段

  • 编译阶段: 在这个阶段,JavaScript引擎会进行词法分析、解析和代码生成。同时,在这个阶段过程中,引擎会识别所有声明(函数声明、变量声明),并把它们”提升“到当前作用域顶端。
  • 执行阶段: 当实际执行代码时,JavaScript 引擎会按照代码的书写顺序依次执行语句。此时,对于那些在编译阶段被提升但未初始化(赋值)的变量,它们的值会被设置为 undefined。而对于函数声明,则会在编译阶段就完全提升,包括函数体。
var a; // 编译阶段(变量声明)
a = 1; // 执行阶段(赋值,绝定数据类型)

基本数据类型的显示转换

在 JavaScript 中,数据类型的转换是一个常见的操作。这里我们了解一下常见的几种数据类型的显示转换规则,(Boolean、String、Number)类型。

Boolean类型: 当使用Boolean()构造函数或直接调用Boolean函数进行转换时,javascript会根据特定的规则将传入的值转换为布尔类型的truefalse

示例:

console.log(Boolean()); // false
console.log(Boolean(1));// true
console.log(Boolean(0));// false
console.log(Boolean(+0));// fasle
console.log(Boolean(-0));// false
console.log(Boolean(""));// false
console.log(Boolean("a"));// true
console.log(Boolean(null));// false
console.log(Boolean(undefined));// false
console.log(Boolean(NaN));// false

总结:

转为false情况:

  • 数字 0+0-0
  • null
  • false
  • NaN (Not a Number)
  • 空字符串 ""
  • undefined

转为true情况: 任何不是上述值的情况都会被转换为 true。例如:

  • 非零数字(如 1-13.14
  • 非空字符串(如 "hello""false"
  • 对象(包括数组和函数)

Number类型: 当你使用 Number() 构造函数或函数进行转换时,JavaScript 会尝试将给定的值转换为数字。以下是几个示例:

  • 字符串中的有效数字会被转换成相应的数字,如 "123" 变成 123
  • 空字符串 "" 会变成 0
  • 包含非数字字符的字符串通常会导致结果为 NaN
  • null 被转换为 0
  • undefined 被转换为 NaN
  • true 和 false 分别转换为 1 和 0
console.log(Number("123")); // 123 
console.log(Number("")); // 0 
console.log(Number(null)); // 0 
console.log(Number(undefined)); // NaN 
console.log(Number(true)); // 1 
console.log(Number(false)); // 0

String类型: 使用 String() 构造函数或函数可以将任何值转换为字符串。以下是一些转换的例子:

  • 数字会被转换为它们的字符串表示形式,如 123 变成 "123"
  • null 和 undefined 分别转换为字符串 "null" 和 "undefined"
  • 布尔值 true 和 false 分别转换为字符串 "true" 和 "false"
  • 对象会被转换为其默认的字符串表示形式,通常是 [object Object],除非该对象定义了自定义的 toString 方法
console.log(String(123)); // "123" 
console.log(String(null)); // "null" 
console.log(String(undefined)); // "undefined" 
console.log(String(true)); // "true" 
console.log(String({})); // "[object Object]"

总结

通过理解这些转换规则,开发者可以在处理不同类型的数据时更加自信,并避免潜在的错误。记住,隐式转换可能会导致意想不到的结果,因此在可能的情况下尽量使用显式转换来确保代码的行为符合预期。