原始类型是不可变的数据类型,包含以下几种:
Number:表示整数和浮点数。
let num = 42;
let pi = 3.14;
String:表示文本数据。
let str = "Hello, world!";
Boolean:表示真(true)或假(false)。
let isTrue = true;
let isFalse = false;
Null:表示空值,即没有任何值。
let empty = null;
Undefined:表示未定义的值。
let notAssigned;
Symbol(ES6引入):表示唯一且不可变的值,通常用于对象的属性标识符。
let sym = Symbol('unique');
BigInt(ES2020引入):表示任意精度的整数。
let bigInt = 123456789012345678901234567890n;
原始类型的值是直接存储在变量中的。它们的大小固定,存储在栈(stack)内存中。因为它们的大小是已知的,所以在分配和访问时速度很快。
引用类型表示复杂的数据结构,包括对象、数组和函数。
Object:对象是键值对的集合。
let obj = { name: "Alice", age: 25 };
Array:数组是按顺序排列的一组值。
let arr = [1, 2, 3, 4];
Function:函数是可以调用的代码块。
function greet() {
console.log("Hello!");
}
其他对象类型:如Date、RegExp、Map、Set等。
引用类型的值是存储在堆(heap)内存中的。变量存储的是指向这些对象的引用(或地址)。因为对象的大小是不固定的,存储在堆中可以动态调整大小。
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 指向与 obj1 相同的对象
obj2.name = "Bob";
console.log(obj1.name); // 输出 "Bob"
存储位置:
赋值方式:
不可变性:
比较:
// 原始类型比较
let a = 10;
let b = 10;
console.log(a === b); // true
// 引用类型比较
let arr1 = [1, 2, 3];
let arr2 = [1, 2, 3];
console.log(arr1 === arr2); // false
let arr3 = arr1;
console.log(arr1 === arr3); // true