Khi mới làm quen với lập trình, việc nắm vững các kiểu dữ liệu JavaScript là bước đệm quan trọng nhất. Đây chính là những viên gạch nền tảng xây dựng nên logic cho mọi ứng dụng. Bài viết này sẽ cùng bạn tìm hiểu chi tiết về hai nhóm chính: kiểu dữ liệu nguyên thủy (Primitive) và kiểu tham chiếu (Object). WiWeb sẽ giúp bạn phân biệt chúng một cách đơn giản và dễ nhớ nhất.
JavaScript là ngôn ngữ có kiểu dữ liệu động (Dynamic Typing)?
Chắc hẳn bạn đã nghe qua thuật ngữ Dynamic Typing. Vậy dynamic typing là gì? Hiểu đơn giản, đây là một đặc tính của ngôn ngữ lập trình, cho phép bạn không cần khai báo kiểu dữ liệu cho một biến trước khi sử dụng. Kiểu dữ liệu của biến sẽ được tự động xác định tại thời điểm chương trình chạy (runtime), dựa trên giá trị mà bạn gán cho nó.
Trong JavaScript, một biến có thể lúc đầu chứa một con số, nhưng sau đó lại có thể chứa một chuỗi ký tự. Điều này mang lại sự linh hoạt lớn cho lập trình viên.
Thử xem ví dụ này nhé:
let myVariable = 100; // Bây giờ, myVariable là kiểu Number
console.log(typeof myVariable); // Kết quả: "number"
myVariable = "Chào bạn, tôi là WiWeb"; // Bây giờ, myVariable lại là kiểu String
console.log(typeof myVariable); // Kết quả: "string"
Bạn thấy không? Chúng ta không cần định nghĩa myVariable là number hay string. JavaScript tự động nhận diện và thay đổi kiểu dữ liệu một cách linh hoạt. Đây chính là sức mạnh của Dynamic Typing.

Phân loại các kiểu dữ liệu trong JavaScript
Trong JavaScript, toàn bộ dữ liệu được chia thành hai nhóm chính. Việc phân biệt hai nhóm này rất quan trọng vì nó ảnh hưởng đến cách dữ liệu được lưu trữ và truyền đi trong chương trình của bạn.
Kiểu dữ liệu nguyên thủy (Primitive Types)
Đây là các kiểu dữ liệu cơ bản và không thể thay đổi (immutable). Khi bạn gán một biến nguyên thủy cho một biến khác, giá trị của nó sẽ được sao chép. JavaScript có 7 kiểu dữ liệu nguyên thủy, chúng ta sẽ đi sâu vào từng loại ở phần tiếp theo.
Kiểu dữ liệu tham chiếu (Reference Types – Object)
Ngược lại với kiểu nguyên thủy, kiểu dữ liệu tham chiếu phức tạp hơn. Chúng có thể chứa nhiều giá trị hoặc các đối tượng khác. Khi bạn gán một biến tham chiếu cho một biến khác, bạn không sao chép giá trị, mà là sao chép địa chỉ tham chiếu đến vùng nhớ chứa đối tượng đó. Các đại diện tiêu biểu của nhóm này là Object, Array, và Function.

Chi tiết các kiểu dữ liệu nguyên thủy trong JavaScript
Bây giờ, hãy cùng WiWeb tìm hiểu chi tiết về 7 kiểu dữ liệu nguyên thủy phổ biến trong JavaScript. Mặc dù tiêu đề có thể đề cập đến 8, nhưng 7 loại sau đây là những gì bạn sẽ gặp hàng ngày.
String (Chuỗi)
Đại diện cho dữ liệu dạng văn bản. Bạn có thể tạo chuỗi bằng cách đặt nội dung vào trong dấu nháy đơn ' ' hoặc nháy kép " ".
let greeting = "Hello WiWeb!";
let name = 'David';
Number (Số)
Đại diện cho các giá trị số, bao gồm cả số nguyên và số thập phân. JavaScript không phân biệt hai loại này.
let age = 25;
let price = 19.99;
Ngoài ra, kiểu Number còn có các giá trị đặc biệt như Infinity (vô cực) và NaN (Not-a-Number).
BigInt
Kiểu BigInt được dùng để biểu diễn các số nguyên có giá trị cực lớn, vượt qua giới hạn của kiểu Number. Bạn tạo ra một BigInt bằng cách thêm n vào cuối một số nguyên.
const veryBigNumber = 9007199254740991n;
Boolean (Luận lý)
Đây là kiểu dữ liệu chỉ có hai giá trị: true (đúng) hoặc false (sai). Nó thường được dùng trong các câu lệnh điều kiện để kiểm tra một mệnh đề.
let isLoggedIn = true;
let hasPermission = false;
Undefined
Một biến được khai báo nhưng chưa được gán giá trị sẽ có kiểu là undefined. Đây là giá trị mặc định mà hệ thống tự gán.
let myVar;
console.log(myVar); // Kết quả: undefined
Null
Null cũng đại diện cho sự “trống rỗng” nhưng mang tính chủ ý. Lập trình viên sẽ gán null cho một biến để chỉ ra rằng nó không có giá trị nào một cách có chủ đích. Rất khác với undefined, phải không nào?
let emptyObject = null;
Symbol
Symbol là một kiểu dữ liệu đặc biệt, được giới thiệu trong ES6. Mỗi giá trị Symbol là duy nhất và không thể thay đổi. Nó thường được dùng để tạo các thuộc tính duy nhất cho đối tượng.
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 === id2); // Kết quả: false

Tìm hiểu về kiểu dữ liệu tham chiếu (Object)
Kiểu dữ liệu tham chiếu là một khái niệm cốt lõi trong JavaScript. Thay vì chứa một giá trị duy nhất, chúng có thể chứa một tập hợp các thuộc tính và phương thức. Hãy xem qua ba loại phổ biến nhất.
Object (Đối tượng)
Đây là loại cơ bản nhất trong nhóm tham chiếu. Một Object là một bộ sưu tập các cặp key-value (khóa-giá trị). Bạn có thể dùng nó để mô tả một thực thể phức tạp.
let user = {
name: "WiWeb",
email: "contact@wiweb.vn",
isMaster: true
};
console.log(user.name); // Kết quả: "WiWeb"
Array (Mảng)
Array là một dạng đặc biệt của Object, được sử dụng để lưu trữ một danh sách các giá trị có thứ tự. Bạn truy cập các phần tử trong mảng qua chỉ số (index), bắt đầu từ 0.
let technologies = ["HTML", "CSS", "JavaScript"];
console.log(technologies[2]); // Kết quả: "JavaScript"
Function (Hàm)
Trong JavaScript, hàm cũng được coi là một đối tượng. Điều này có nghĩa là bạn có thể gán hàm cho một biến, truyền nó như một tham số, hoặc trả về nó từ một hàm khác. Đây là một tính năng cực kỳ mạnh mẽ.
function greet(name) {
console.log("Xin chào, " + name);
}
greet("WiWeb"); // Kết quả: "Xin chào, WiWeb"

Làm thế nào để kiểm tra kiểu dữ liệu trong JavaScript?
Khi làm việc với một ngôn ngữ có kiểu dữ liệu động, việc kiểm tra kiểu dữ liệu của một biến là rất cần thiết. JavaScript cung cấp một công cụ đơn giản để làm việc này.
Sử dụng toán tử typeof
Toán tử typeof trong JavaScript là cách nhanh nhất để xác định kiểu dữ liệu của một biến. Nó trả về một chuỗi ký tự cho biết kiểu của toán hạng.
Cách dùng rất đơn giản:
console.log(typeof "WiWeb"); // "string"
console.log(typeof 123); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof { a: 1 }); // "object"
console.log(typeof [1, 2, 3]); // "object"
console.log(typeof function(){}); // "function"
Các trường hợp đặc biệt của typeof (typeof null)
Toán tử typeof rất hữu ích, nhưng nó có một vài điểm đặc biệt bạn cần lưu ý. Trường hợp nổi tiếng nhất là với null.
console.log(typeof null); // Kết quả: "object"
Kết quả này là một lỗi có từ những phiên bản đầu tiên của JavaScript và được giữ lại để đảm bảo tính tương thích ngược. Hãy luôn ghi nhớ điều này. typeof cũng trả về "object" cho cả mảng và đối tượng thông thường, nên để kiểm tra một biến có phải là mảng hay không, bạn nên dùng Array.isArray().

So sánh các kiểu dữ liệu quan trọng
Hiểu rõ sự khác biệt giữa các kiểu dữ liệu tương tự nhau sẽ giúp bạn tránh được nhiều lỗi không đáng có. Dưới đây là hai phép so sánh quan trọng nhất.
Sự khác nhau giữa Null và Undefined là gì?
Đây là câu hỏi phỏng vấn kinh điển! Mặc dù cả hai đều biểu thị sự “trống rỗng”, nhưng chúng có ý nghĩa khác nhau:
- Undefined: Nghĩa là một biến đã được khai báo nhưng chưa bao giờ được gán giá trị. Đây là giá trị do hệ thống tự động gán.
- Null: Nghĩa là một sự “vô giá trị” có chủ đích. Chính bạn, người lập trình, gán
nullcho một biến để chỉ ra rằng nó không trỏ đến đối tượng nào cả.
Nói cách khác, undefined là sự trống rỗng do “quên”, còn null là sự trống rỗng có “chủ ý”.
Primitive và Reference
Sự khác biệt cốt lõi giữa kiểu dữ liệu nguyên thủy và kiểu dữ liệu tham chiếu nằm ở cách chúng được lưu trữ trong bộ nhớ.
- Lưu trữ theo giá trị (Pass-by-value) cho Primitive: Khi bạn gán một biến nguyên thủy cho biến khác, một bản sao của giá trị được tạo ra.
let a = 10; let b = a; // b nhận một bản sao của giá trị của a b = 20; // Thay đổi b không ảnh hưởng đến a console.log(a); // Kết quả: 10 - Lưu trữ theo tham chiếu (Pass-by-reference) cho Object: Khi bạn gán một biến đối tượng cho biến khác, chúng sẽ cùng trỏ đến một địa chỉ trong bộ nhớ.
let user1 = { name: "Alice" }; let user2 = user1; // user2 và user1 cùng trỏ đến một đối tượng user2.name = "Bob"; // Thay đổi user2 cũng thay đổi cả user1 console.log(user1.name); // Kết quả: "Bob"
Nắm vững khái niệm này sẽ giúp bạn quản lý dữ liệu hiệu quả hơn rất nhiều.

Lời kết
Hiểu về các kiểu dữ liệu trong JavaScript là một kỹ năng nền tảng không thể thiếu. Chúng ta đã cùng nhau tìm hiểu về tính năng Dynamic Typing, phân loại hai nhóm chính là Primitive và Reference, cũng như cách kiểm tra và so sánh chúng.
Nắm chắc kiến thức này, bạn sẽ tự tin hơn rất nhiều khi xây dựng logic và xử lý dữ liệu trong các dự án của mình.
Bạn còn thắc mắc nào về chủ đề này không? Hãy để lại ý kiến của bạn ở phần bình luận nhé!
Nếu bạn cần một website chuyên nghiệp để phát triển thương hiệu, WiWeb luôn sẵn sàng tư vấn. Liên hệ với chúng tôi nhé!


06/02/2026
05/02/2026
04/02/2026
03/02/2026
02/02/2026
21/01/2026