JS - 数据类型
JavaScript 的数据类型分为两大类:原始类型(基本类型) 和对象类型(引用类型)。
1、原始类型(按值访问)包括:
String 字符串、Number 数字、Boolean 布尔值、Undefined 未定义、Null 空值、Symbol 唯一值、BigInt 大整数
2、对象类型(按引用访问)包括:
标准对象 Object、数组 Array、函数 Function、日期 Date、正则 RegExp,其他...
下面我们来详细解读每一种类型。
目录
一、原始类型 (Primitive Types)
1. String (字符串)
2. Number (数字)
3. Boolean (布尔值)
4. Undefined (未定义)
5. Null (空值)
6. Symbol (符号) (ES6)
7. BigInt (大整数) (ES2020)
二、对象类型 (Object Types)
1. Object (对象)
2. Array (数组)
3. Function (函数)
4. Date (日期)
5. RegExp (正则表达式)
6. 其他内置对象
三、关键特性与区别
1. 动态类型
2. 类型检测方法
3. 原始类型 vs 对象类型
总结
一、原始类型 (Primitive Types)
原始类型的值直接存储在变量访问的位置。当您将一个原始值赋值给另一个变量时,会创建该值的一个副本。
1. String (字符串)
表示文本数据。
let name = "Alice";
let greeting = 'Hello World';
let template = `My name is ${name}`; // 模板字符串 (ES6)
2. Number (数字)
表示整数和浮点数。JavaScript 只有一种数字类型。
let age = 25;
let price = 99.99;
let temperature = -10;
let infinity = Infinity;
let notANumber = NaN; // 特殊值:不是一个数字
3. Boolean (布尔值)
表示逻辑值:true
或 false
。
let isLogged = true;
let isEmpty = false;
4. Undefined (未定义)
表示变量已声明但尚未赋值。
let x;
console.log(x); // undefined
5. Null (空值)
表示一个空或不存在的值。需要主动赋值。
let user = null; // 表示user为空
6. Symbol (符号) (ES6)
表示唯一的、不可变的值,主要用于对象的唯一属性名。
let id1 = Symbol("id");
let id2 = Symbol("id");
console.log(id1 === id2); // false (即使描述相同,值也不同)// 用作对象键
let obj = {[id1]: "value"
};
7. BigInt (大整数) (ES2020)
表示任意精度的整数,用于大于 2^53 - 1 的整数。
let bigNumber = 9007199254740991n; // 字面量加 n
let alsoBig = BigInt("9007199254740991"); // 使用 BigInt 函数
二、对象类型 (Object Types)
对象类型是属性的集合,属性是键值对。当您将一个对象赋值给另一个变量时,复制的是引用(内存地址),而不是值本身。
1. Object (对象)
最通用的对象类型。
let person = {name: "Bob",age: 30,isStudent: false
};
2. Array (数组)
用于存储有序的数据集合。
let fruits = ["apple", "banana", "orange"];
let mixed = [1, "hello", true, { name: "Alice" }];
3. Function (函数)
函数也是对象,可以被调用。
function greet(name) {return `Hello, ${name}!`;
}// 函数表达式
let multiply = function(a, b) {return a * b;
};// 箭头函数 (ES6)
let divide = (a, b) => a / b;
4. Date (日期)
用于处理日期和时间。
let now = new Date(); // 当前时间
let specificDate = new Date("2023-10-01");
5. RegExp (正则表达式)
用于模式匹配。
let pattern = /ab+c/; // 字面量形式
let regex = new RegExp("ab+c"); // 构造函数形式
6. 其他内置对象
-
Map: 键值对集合,键可以是任意类型。
-
Set: 唯一值的集合。
-
Promise: 用于处理异步操作。
-
Error: 错误对象。
三、关键特性与区别
1. 动态类型
JavaScript 是弱类型(动态类型)语言,变量类型可以改变。
let dynamic = "I'm a string"; // String
dynamic = 42; // 现在变成了 Number
dynamic = true; // 现在变成了 Boolean
2. 类型检测方法
方法 | 说明 | 示例 |
---|---|---|
| 检测基本类型 |
|
| 检测对象类型 |
|
| 检测数组 |
|
// typeof 的局限性
typeof "hello" // "string"
typeof 42 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof 123n // "bigint"
typeof null // "object" (历史遗留问题)
typeof [] // "object" (无法区分数组)
typeof {} // "object"
typeof function(){} // "function"
3. 原始类型 vs 对象类型
特性 | 原始类型 | 对象类型 |
---|---|---|
存储方式 | 按值存储 | 按引用存储 |
可变性 | 不可变 | 可变 |
比较 | 值比较 | 引用比较 |
复制 | 创建副本 | 复制引用 |
// 原始类型:值比较
let a = 10;
let b = a; // b 是 a 值的副本
b = 20;
console.log(a); // 10 (a 不变)// 对象类型:引用比较
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 和 obj1 指向同一个对象
obj2.name = "Bob";
console.log(obj1.name); // "Bob" (obj1 也被修改了)
总结
-
7种原始类型:String, Number, Boolean, Undefined, Null, Symbol, BigInt
-
对象类型:Object, Array, Function, Date, RegExp 等
-
关键区别:原始类型按值访问,对象类型按引用访问
掌握这些数据类型是深入学习 JavaScript 的基础,特别是在理解变量赋值、函数传参和内存管理方面至关重要。