概述
JavaScript 中的数据类型主要分为两类:原始类型和引用类型。
原始类型
原始类型包括简单的数据值,它们是不可变的(自行了解),也就是说一旦创建后就不能改变其值。原始类型有以下几种:
- Number
- String
- Boolean
- Undefined
- Null
- Symbol
- BigInt
Number
Number 类型用于表示整数和浮点数,JavaScript 不区分整数和浮点数。
const num1 = 10;
const num2 = 5.5;
String
String 类型用于表示文本数据。字符串可以用单引号、双引号或反引号定义。(推荐用单引号)
const str = 'Hello, World!';
Boolean
Boolean 类型只有两个值:true 和 false。
const flag = true;
Undefined
Undefined 类型表示一个未定义的值。通常,如果一个变量被声明但没有赋值,则它的值为 undefined。
const value;
console.log(value); // undefined
Null
Null 类型表示一个空对象指针。通常用来表示“无”或“不存在”的值。
const nothing = null;
Symbol
Symbol 类型是 ES6 新引入的一种原始类型,用于创建独一无二的标识符。
const s1 = Symbol('foo');
const s2 = Symbol('foo');
console.log(s1 === s2); // false
BigInt
BigInt 类型用于表示任意大小的整数。在数值后面加上 n 来标记 BigInt 类型。
const bigNum = 1234567890123456789012345678901234567890n;
引用类型
引用类型是通过引用访问的对象。这些对象在内存中占据一块区域,当我们创建一个引用类型的值时,我们实际上是创建了一个指向该内存位置的引用。
- Object
- Array
- Function
- Date
- RegExp
Object
Object 类型是最基本的引用类型,它是所有其他引用类型的基类。
const obj = { name: 'Alice', age: 30 };
Array
Array
类型是一种特殊的对象类型,用于存储有序的值列表。
const arr = [1, 2, 3];
Function
Function
类型用于定义函数,函数也是对象。
function greet(name) {
console.log('Hello, ' + name);
}
Date
Date
类型用于处理日期和时间。
const now = new Date();
RegExp
RegExp
类型用于创建正则表达式对象。
const regex = /\d+/g;
类型检测
可以使用 typeof
运算符来检测一个值的类型。
console.log(typeof 42); // "number"
console.log(typeof "hello"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (注意:`null` 的 `typeof` 结果为 "object")
console.log(typeof Symbol("foo")); // "symbol"
console.log(typeof 123n); // "bigint"
对于更具体的类型检测,可以使用 instanceof
关键字或直接比较 constructor
属性。
const obj = {};
console.log(obj instanceof Object); // true
console.log(Array.isArray([])); // true