JavaScript có 7 kiểu dữ liệu nguyên thủy (primitive) – là các giá trị bất biến, không phải object, không có phương thức riêng (nhưng JS tự động wrap tạm khi truy cập property/method).
Danh sách 7 kiểu Primitive
1. String (Chuỗi)
Dãy ký tự Unicode. Viết trong dấu nháy đơn, kép hoặc backtick.
"Hello World"
'JavaScript'
`Template literal: ${bien}`
2. Number (Số)
Số thực 64-bit (IEEE 754). Bao gồm integer, float, NaN, Infinity.
42, 3.14, -10, 1e5, NaN, Infinity
3. BigInt (Số nguyên lớn - ES2020)
Số nguyên độ chính xác tùy ý, thêm hậu tố n.
9007199254740991n
123n + 456n // 579n
4. Boolean (Logic)
Chỉ 2 giá trị: true (đúng) và false (sai).
true
false
5. Undefined (Chưa định nghĩa)
Biến đã khai báo nhưng chưa gán giá trị. Giá trị mặc định của tham số không truyền, property không tồn tại.
let x;
console.log(x); // undefined
6. Null (Rỗng)
Giá trị rỗng được gán chủ động. Kiểu typeof null === "object" là bug lịch sử của JS.
let y = null;
console.log(y); // null
7. Symbol (Duy nhất - ES6)
Giá trị duy nhất, không thể trùng lặp. Dùng làm key object riêng tư.
const id = Symbol('id');
const id2 = Symbol('id');
console.log(id === id2); // false
Bảng so sánh nhanh
| Kiểu | typeof | Mutable? | So sánh |
|---|---|---|---|
| String | "string" | Không | Giá trị |
| Number | "number" | Không | Giá trị |
| BigInt | "bigint" | Không | Giá trị |
| Boolean | "boolean" | Không | Giá trị |
| Undefined | "undefined" | Không | Giá trị |
| Null | "object" ⚠️ | Không | Giá trị |
| Symbol | "symbol" | Không | Giá trị |
Primitive vs Object Wrapper
// Primitive
"hello".length; // 5 - JS tự wrap tạm String object
// Object wrapper (KHÔNG KHUYẾN NGHỊ)
new String("hello"); // Object, typeof = "object"
typeof "hello" === typeof new String("hello"); // false
Lưu ý quan trọng
- Primitive được truyền theo giá trị (copy).
- Không thể thêm property vào primitive:
"a".prop = 1không báo lỗi nhưng"a".proplàundefined. nullvàundefinedkhông có wrapper object.- Dùng
Object(value)để bọc primitive thành object nếu cần (hiếm).