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会根据特定的规则将传入的值转换为布尔类型的true或false。
示例:
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 nullfalseNaN(Not a Number)- 空字符串
"" undefined
转为true情况:
任何不是上述值的情况都会被转换为 true。例如:
- 非零数字(如
1,-1,3.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]"
总结
通过理解这些转换规则,开发者可以在处理不同类型的数据时更加自信,并避免潜在的错误。记住,隐式转换可能会导致意想不到的结果,因此在可能的情况下尽量使用显式转换来确保代码的行为符合预期。