JavaScript là ngôn ngữ kiểu động (dynamically typed) với hệ thống kiểu dữ liệu linh hoạt. Hiểu rõ các kiểu và cấu trúc dữ liệu là nền tảng để viết code hiệu quả.
Phân loại tổng quan
Hai nhóm chính: Primitive (Nguyên thủy) và Non-Primitive / Object (Tham chiếu).
1. Primitive Types (7 kiểu - ES2020)
| Kiểu | Mô tả | Ví dụ |
|---|---|---|
String | Chuỗi ký tự Unicode | "Hello", 'World', `Template ${var}` |
Number | Số thực 64-bit (IEEE 754) | 123, 3.14, NaN, Infinity, -Infinity |
BigInt | Số nguyên tùy ý độ chính xác | 123n, 9007199254740991n |
Boolean | Logic đúng/sai | true, false |
Undefined | Biến khai báo chưa gán giá trị | undefined |
Null | Giá trị rỗng cố ý | null |
Symbol | Giá trị duy nhất, không trùng lặp | Symbol('id'), Symbol.for('key') |
Đặc điểm: Immutable, so sánh bằng giá trị, lưu trên stack (tối ưu).
2. Object Types (Kiểu tham chiếu)
Mọi thứ không phải primitive là object. Object là tập hợp các property (thuộc tính) dạng cặp key-value.
Hai loại property:
- Data Property: Liên kết key với một giá trị (value). Có attributes:
value,writable,enumerable,configurable. - Accessor Property: Liên kết key với getter và/hoặc setter. Không có
value, thay vào đó cóget/set.
// Data property
const obj = { name: "An" }; // value: "An", writable: true...
// Accessor property
const user = {
_age: 20,
get age() { return this._age; },
set age(val) { if (val > 0) this._age = val; }
};
Cấu trúc dữ liệu dựng sẵn (Built-in Data Structures)
| Cấu trúc | Mô tả | Đặc điểm chính |
|---|---|---|
Object | Key-value map (key: string/symbol) | Cơ bản nhất, prototype-based |
Array | Danh sách có thứ tự, index số | Length tự động, methods phong phú |
Map | Key-value map (key: bất kỳ kiểu) | Giữ thứ tự insert, size property |
Set | Tập hợp giá trị duy nhất | Không trùng lặp, has/add/delete |
WeakMap | Map với key yếu (weak reference) | Key phải là object, cho GC dọn dẹp |
WeakSet | Set với value yếu | Value phải là object |
TypedArray | Mảng nhị phân (Int8, Float32...) | Hiệu năng cao, xử lý binary data |
ArrayBuffer | Buffer nhị phân gốc | Dùng với TypedArray/DataView |
Kiểm tra kiểu dữ liệu
typeof "hello"; // "string"
typeof 42; // "number"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
typeof 123n; // "bigint"
typeof null; // "object" (bug nổi tiếng JS)
typeof {}; // "object"
typeof []; // "object"
typeof function(){}; // "function"
Array.isArray([]); // true
Object.prototype.toString.call(null); // "[object Null]"
Tóm tắt
- 7 kiểu primitive: string, number, bigint, boolean, undefined, null, symbol.
- Object bao gồm: Object, Array, Function, Map, Set, WeakMap, WeakSet, TypedArray, Date, RegExp, Promise...
- Primitive: bất biến, so sánh giá trị. Object: biến đổi, so sánh tham chiếu.
- Dùng
typeofcho primitive,Array.isArray(),instanceof,Object.prototype.toString.call()cho object.