JavaScript 中有多种数据类型,可以分为两大类:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。
基本数据类型(Primitive Data Types)
-
Undefined:表示一个未定义的值。当声明一个变量但未对其赋值时,该变量的默认值为
undefined
。 -
Null:表示一个空对象指针。它通常用来表示变量没有值或者不存在。
-
Boolean:表示逻辑实体,有两个值:
true
和false
。 -
Number:表示数字,包括整数和浮点数。JavaScript 中的数字都是浮点型,没有单独的整数类型。
-
String:表示文本数据,由一系列字符组成。在 JavaScript 中,字符串可以用单引号、双引号或反引号(模板字符串)来定义。
-
Symbol(ES6 引入):表示独一无二的值。Symbol 值通过
Symbol()
函数生成,通常用作对象属性的键。 -
BigInt(ES10 引入):表示任意精度的整数。在 JavaScript 中,常规的
Number
类型可以安全表示的最大整数是2^53 - 1
,BigInt
可以用来表示更大的整数。
引用数据类型(Reference Data Types)
-
Object:对象是属性的集合,每个属性都由键值对组成。对象是 JavaScript 中最复杂的数据类型,包括数组、函数、日期等。
-
Array:数组是一种特殊的对象,用于存储有序的元素集合。数组元素可以通过索引访问。
-
Function:函数是 JavaScript 中的一等公民,可以被赋值给变量,作为参数传递给其他函数,或者作为其他函数的返回值。
-
Date:日期对象用于处理日期和时间。
-
RegExp:正则表达式对象用于匹配字符串的模式。
-
Map 和 Set(ES6 引入):
Map
是一种键值对的集合,Set
是一种不包含重复元素的集合。 -
WeakMap 和 WeakSet(ES6 引入):
WeakMap
和WeakSet
是Map
和Set
的变体,它们的键是弱引用,不会阻止垃圾回收。 -
Promise(ES6 引入):表示异步操作的最终完成(或失败)及其结果值。
-
Proxy 和 Reflect(ES6 引入):
Proxy
可以创建一个对象的代理,用于实现自定义行为;Reflect
是一个内置对象,提供了一系列与对象操作相关的方法。 -
Generator(ES6 引入):生成器函数是一种特殊类型的函数,可以暂停和恢复执行。
-
BigInt(ES10 引入):虽然
BigInt
通常被归类为基本数据类型,但它也可以被视为引用类型,因为它可以作为对象存在。
在 JavaScript 中,可以使用 typeof
运算符来检查变量的数据类型。例如:
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"(这是一个历史遗留的 bug)
console.log(typeof true); // "boolean"
console.log(typeof 42); // "number"
console.log(typeof "Hello"); // "string"
console.log(typeof Symbol("sym")); // "symbol"
console.log(typeof 123n); // "bigint"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"(数组实际上是对象)
console.log(typeof function() {}); // "function"
了解 JavaScript 中的数据类型对于编写正确的代码和理解代码的行为至关重要。