Tại phòng khám của Dr. JavaScript, mỗi “bệnh nhân” đại diện cho một kiểu dữ liệu khác nhau. Một ngày, Dr. JavaScript gặp phải thách thức: “căn bệnh khó lường” – khi kiểm tra, cả null, object, và array đều trả về kiểu dữ liệu là “object”. Làm sao để phân biệt và “chẩn đoán” chính xác từng trường hợp?

JavaScript hỗ trợ nhiều, từ cơ bản như String, Number, BigInt, Boolean, Null, Undefined, Symbol đến phức tạp như Object. Để xử lý dữ liệu một cách chính xác, việc hiểu rõ và phân biệt các kiểu dữ liệu này là cực kỳ quan trọng.
1. String
Kiểu dữ liệu String biểu diễn chuỗi ký tự.
Ví dụ:
let greeting = "Hello, world!";
console.log(typeof greeting === "string"); // true
typeof greeting trả về "string" và so sánh với "string" sẽ là true, xác nhận greeting là kiểu String.
2. Number
Kiểu Number biểu diễn số.
let value = 30; // Thử thay đổi thành NaN để kiểm tra
console.log(typeof value === "number" && !isNaN(value)); // true
NaN được sử dụng để biểu thị kết quả của một phép toán số học không hợp lệ, và typeof NaN cũng trả về "number", điều này có thể gây nhầm lẫn khi cần xác định một biến có phải là số hợp lệ hay không. Do đó, cần kiểm tra thêm điều kiện để loại trừ NaN.
Trong JavaScript, kiểu
Numbercó thể biểu diễn số nguyên và số thực. Tuy nhiên, nó có giới hạn ở mức khoảng ±(2^53 – 1) do sử dụng định dạng số IEEE 754. Điều này dẫn đến việcBigInttrở nên quan trọng trong trường hợp xử lý số lớn vượt quá giới hạn củaNumber.
3. BigInt
BigInt cho số nguyên lớn.
let largeNumber = 9007199254740991n;
console.log(typeof largeNumber === "bigint"); // true
typeof largeNumber trả về "bigint" và so sánh với "bigint" cho ra true, xác nhận là BigInt.
Đây là kiểu dữ liệu mới được giới thiệu để xử lý các số nguyên lớn hơn giới hạn của
Number. Ví dụ:9007199254740992có thể được biểu diễn chính xác vớiBigInt("9007199254740992")hoặc9007199254740992n.
4. Boolean
Boolean có giá trị true hoặc false.
Ví dụ:
let isStudent = true;
console.log(typeof isStudent === "boolean"); // true
typeof isStudent trả về "boolean” và so sánh với "boolean" cho ra true.
5. Null
Null biểu diễn giá trị “không có gì”.
Ví dụ:
let emptyValue = null;
console.log(emptyValue === null); // true
So sánh emptyValue với null cho ra true, xác nhận giá trị là Null.
Trong JavaScript, khi sử dụng typeof với một biến có giá trị null, nó sẽ trả về "object" chứ không phải "null". Để xác định một giá trị là null, chúng ta phải sử dụng so sánh trực tiếp emptyValue === null.
6. Undefined
Undefined biểu thị cho biến chưa được gán giá trị.
Ví dụ:
let notAssigned;
console.log(typeof notAssigned === "undefined"); // true
typeof notAssigned trả về "undefined" và so sánh với "undefined" cho ra true.
7. Symbol
Symbol tạo định danh duy nhất.
Ví dụ:
let sym = Symbol("unique");
console.log(typeof sym === "symbol"); // true
typeof sym trả về "symbol" và so sánh với "symbol” cho ra true.
8. Object
Object chứa cặp khóa và giá trị.
Ví dụ:
let person = { name: "John", age: 30 };
console.log(typeof person === "object" && person !== null && !Array.isArray(person)); // true
Kiểm tra typeof person là "object" và không phải null.
Như đã giải thích ở trên, typeof null và typeof [] đều trả về "object", nên chỉ kiểm tra typeof person === "object" không đủ để xác nhận biến đó thực sự là một đối tượng. Do đó, cần thêm điều kiện person !== null và !Array.isArray(person) để đảm bảo rằng biến đó không phải là null và không phải là Array.
8.1 Array
Mảng chứa danh sách các giá trị.
Ví dụ:
let fruits = ["apple", "banana", "cherry"];
console.log(Array.isArray(fruits)); // true
// hoặc
console.log(fruits instanceof Array); // true
Array.isArray(fruits) trả về true, xác nhận fruits là mảng.
Khi sử dụng typeof với mảng sẽ trả về "object" chứ không phải "array". Điều này là do mảng cũng là đối tượng (đối tượng đặc biệt). Vì vậy chỉ dùng typeof fruits === "object" sẽ bị sai nếu giá trị biến là object hoặc null. Trường hợp này chúng ta sử dụng Array.isArray(), nó sẽ trả vềtrue nếu biến là một mảng, và false nếu không phải mảng.
8.2 Function
Function thực hiện tác vụ và giúp tái sử dụng code.
Ví dụ:
function greet() {
return "Hello, world!";
}
console.log(typeof greet === "function"); // true
typeof greet trả về "function” và so sánh với "function" cho ra true, xác nhận greet là Function.
Tóm tắt bài viết
- Mô tả vấn đề: Trong JavaScript,
typeofchonull,object, vàarrayđều trả về"object"; vàtypeofchonumbervàNaNđều trả về"number"gây khó khăn trong việc phân biệt chúng. - Các kiểu dữ liệu:
- String: Chuỗi ký tự, kiểm tra bằng
typeof. - Number: Số, kiểm tra bằng
typeof, cần loại trừNaN. - BigInt: Số nguyên lớn, kiểm tra bằng
typeof. - Boolean: Giá trị
truehoặcfalse, kiểm tra bằngtypeof. - Null: “Không có gì”, phải so sánh trực tiếp với
nulldotypeoftrả về"object". - Undefined: Biến chưa được gán giá trị, kiểm tra bằng
typeof. - Symbol: Định danh duy nhất, xác nhận bằng
typeof. - Object: Cặp khóa và giá trị, cần kiểm tra không phải
nullvà không phảiArray. - Array: Danh sách giá trị, dùng
Array.isArray()hoặcinstanceof Arrayđể kiểm tra. - Function: Thực hiện tác vụ và giúp tái sử dụng code, kiểm tra bằng
typeof.
- String: Chuỗi ký tự, kiểm tra bằng
- 4 trường hợp cần ghi nhớ cách kiểm tra:
- Number: Cần loại trừ
NaN. Null: So sánh trực tiếp vớinull.Object: Nhớ loại trừArrayvàNull.Array: Sử dụngArray.isArray()hoặcinstanceof Array.
- Number: Cần loại trừ