Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Các kiểu dữ liệu và cấu trúc dữ liệu trong JavaScript

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ểuMô tảVí dụ
StringChuỗi ký tự Unicode"Hello", 'World', `Template ${var}`
NumberSố thực 64-bit (IEEE 754)123, 3.14, NaN, Infinity, -Infinity
BigIntSố nguyên tùy ý độ chính xác123n, 9007199254740991n
BooleanLogic đúng/saitrue, false
UndefinedBiến khai báo chưa gán giá trịundefined
NullGiá trị rỗng cố ýnull
SymbolGiá trị duy nhất, không trùng lặpSymbol('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úcMô tảĐặc điểm chính
ObjectKey-value map (key: string/symbol)Cơ bản nhất, prototype-based
ArrayDanh sách có thứ tự, index sốLength tự động, methods phong phú
MapKey-value map (key: bất kỳ kiểu)Giữ thứ tự insert, size property
SetTập hợp giá trị duy nhấtKhông trùng lặp, has/add/delete
WeakMapMap với key yếu (weak reference)Key phải là object, cho GC dọn dẹp
WeakSetSet với value yếuValue phải là object
TypedArrayMảng nhị phân (Int8, Float32...)Hiệu năng cao, xử lý binary data
ArrayBufferBuffer nhị phân gốcDù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 typeof cho primitive, Array.isArray(), instanceof, Object.prototype.toString.call() cho object.