JavaScript 是一种动态类型语言,它具有以下数据类型:
- Number(数字) :表示数值,包括整数和浮点数。例如:
42、3.14。 - String(字符串) :表示文本数据,由一串字符组成。可以使用单引号或双引号来表示。例如:
"Hello"、'JavaScript'。 - Boolean(布尔值) :表示逻辑上的真或假。只有两个取值:
true(真)和false(假)。 - Array(数组) :是一种有序的数据集合。可以存储多个值,每个值称为一个元素,并且通过索引访问。数组可以包含不同类型的元素。例如:
[1, 2, 3]、['apple', 'banana', 'orange']。 - Object(对象) :表示键值对的集合,每个键都是唯一的,并且与一个值相关联。对象是一种无序的数据结构,用于组织复杂的数据。例如:
{ name: 'John', age: 30 }。 - Undefined(未定义) :表示变量声明但未赋值时的默认值。如果访问未初始化的变量,其值将为
undefined。 - Null(空值) :表示变量为空或不存在对象或数组。如果需要明确指定一个空值,可以将变量设置为
null。 - Symbol(符号) :表示唯一且不可变的数据类型,通常用作对象属性的键。Symbol 在 ES6 中引入。
- BigInt(大整数) :表示任意精度的整数。它可以用于处理超过
Number类型所能表示的范围的整数。BigInt 在 ES2020 中引入。
基本数据类型存储在栈中,栈用于存储基本数据类型和执行代码引用数据类型存储在堆中:
除了这些基本数据类型,JavaScript 还具有特殊的对象类型,例如:
- Date(日期) :用于表示日期和时间。
- RegExp(正则表达式) :用于描述字符串模式的对象。
- Function(函数) :用于封装可执行的代码块。
判断数据类型有以下几种方式
-
typeof 操作符:可以返回一个表示数据类型的字符串。例如:
typeof 42; // "number" typeof "Hello"; // "string" typeof true; // "boolean" typeof []; // "object" typeof {}; // "object" typeof undefined; // "undefined" typeof null; // "object" typeof Symbol(); // "symbol" -
instanceof 操作符:用于检查对象是否属于某个特定的类型。例如:
[] instanceof Array; // true {} instanceof Object; // true new Date() instanceof Date; // true /regex/ instanceof RegExp; // true -
Object.prototype.toString.call() 方法:通过调用该方法并传入要检查的值作为参数,可以获取更精确的类型信息。例如:
Object.prototype.toString.call(42); // "[object Number]" Object.prototype.toString.call("Hello"); // "[object String]" Object.prototype.toString.call(true); // "[object Boolean]" Object.prototype.toString.call([]); // "[object Array]" Object.prototype.toString.call({}); // "[object Object]" Object.prototype.toString.call(undefined); // "[object Undefined]" Object.prototype.toString.call(null); // "[object Null]" Object.prototype.toString.call(Symbol()); // "[object Symbol]"
通过上述方法,可以对给定的值进行数据类型的判断。不过需要注意的是,typeof null 的结果是 "object",这是 JavaScript 中的一个历史遗留问题。
可以使用以下几种方式来进行数据类型转换:
-
显式类型转换:通过特定的函数或操作符将一个数据类型转换为另一个数据类型。常见的显式类型转换方式包括:
- String() :将其他数据类型转换为字符串。
- Number() :将其他数据类型转换为数字。
- Boolean() :将其他数据类型转换为布尔值。
- parseInt() 和 parseFloat() :将字符串解析为整数或浮点数。
例如:
String(42); // "42" Number("3.14"); // 3.14 Boolean(0); // false parseInt("10"); // 10 parseFloat("3.14"); // 3.14 -
隐式类型转换:在某些表达式中,JavaScript 会自动执行隐式类型转换以匹配运算符或上下文的预期数据类型。常见的隐式类型转换场景包括:
- 字符串与数字之间的加法运算,将数字转换为字符串。
- 比较运算符(如
==、!=、>、<等)比较不同数据类型时进行类型转换。 - 条件语句中的值的布尔强制转换。
例如:
"Hello" + 42; // "Hello42" "10" == 10; // true if (0) { // 0 被隐式转换为 false console.log("This will not be executed."); } -
特定方法的类型转换:JavaScript 中的一些内置方法或属性可以对特定数据类型进行类型转换。例如:
- toString() :将数字转换为字符串。
- parseInt() 和 parseFloat() :将字符串解析为整数或浮点数。
- Array.from() :将类似数组的对象转换为真正的数组。
- Object.keys() :将对象中的键转换为数组。