2.1 Biến — là tham chiếu
Trong JavaScript, các biến là tham chiếu tới đối tượng, chứ không phải chính biến đó. Điều này có nghĩa là khi bạn tạo một biến trong JavaScript, bạn chỉ đơn thuần tạo một tham chiếu tới đối tượng trong bộ nhớ.
Tính năng này của ngôn ngữ có những hệ quả quan trọng đối với việc làm việc với biến, đặc biệt khi truyền đối tượng vào hàm hoặc gán chúng cho các biến khác.
Khi bạn tạo một biến và gán nó giá trị, JavaScript sẽ cấp phát đối tượng trong bộ nhớ cho giá trị đó và làm biến trở thành tham chiếu tới đối tượng này. Nếu bạn gán một biến cho biến khác, biến mới sẽ tham chiếu tới cùng đối tượng, giống như biến ban đầu. Điều này có nghĩa là các thay đổi, được thực hiện qua một biến, sẽ ảnh hưởng lên biến khác nếu đối tượng đó có thể thay đổi.
Ví dụ:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // Hiển thị: [1, 2, 3, 4]
Chúng ta đã thêm số 4 vào biến b
, nhưng nó cũng được thêm vào danh sách trong biến a
, vì thực sự cả hai biến
— chỉ là tham chiếu tới đối tượng danh sách [1, 2, 3]
2.2 Kiểu undefined
Trong JavaScript, có hai kiểu dữ liệu đặc biệt: null
và undefined
. Những kiểu dữ liệu này thường gây ra thắc mắc cho các developer
bởi vì chúng khá giống nhau, nhưng chúng có mục đích khác nhau và được sử dụng trong những tình huống khác nhau. Hãy xem xét chúng kỹ hơn.
Kiểu undefined
Kiểu undefined
đại diện cho giá trị của một biến đã được khai báo nhưng chưa được khởi tạo. Giá trị này cũng
được trả lại khi truy cập vào thuộc tính không tồn tại của đối tượng hoặc phần tử của mảng không tồn tại.
Ví dụ
1. Biến chưa được khởi tạo:
let x;
console.log(x); // undefined
2. Thuộc tính không tồn tại của đối tượng:
let obj = {};
console.log(obj.property); // undefined
3. Phần tử không tồn tại trong mảng:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. Đối số không có của hàm:
function myFunction(a, b) {
console.log(b); // undefined, nếu gọi là myFunction(1)
}
myFunction(1);
Thuộc tính undefined:
undefined
là một kiểu dữ liệu và giá trịtypeof undefined
trả vềundefined
2.3 Kiểu null
Kiểu null
đại diện cho việc không có giá trị một cách cố ý. Giá trị này thường được sử dụng để khởi tạo
các biến mà sau này sẽ được gán cho một đối tượng hoặc để xóa giá trị của biến.
Ví dụ
1. Khởi tạo biến:
let obj = null;
console.log(obj); // null
2. Xóa giá trị của biến:
let user = { name: "Alice" };
user = null; // user giờ không chỉ định vào đối tượng
Thuộc tính null:
null
là một giá trị đại diện cho việc không có giá trị một cách cố ýtypeof null
trả vềobject
, điều này được công nhận là lỗi trong ngôn ngữ JavaScript (thực tếnull
không phải là đối tượng)
2.4 So sánh null và undefined
Mặc dù null
và undefined
có thể được sử dụng để chỉ ra sự không tồn tại của giá trị,
chúng khác nhau về mục đích và ngữ cảnh sử dụng.
Thuộc tính | null | undefined |
---|---|---|
Kiểu | Kiểu nguyên thủy | Kiểu nguyên thủy |
Mục đích | Không có giá trị một cách cố ý | Biến chưa được khởi tạo |
Sử dụng | Khởi tạo biến, xóa giá trị | Thuộc tính không tồn tại, phần tử mảng |
Giá trị mặc định | Không | Có (cho biến chưa được khởi tạo, tham số hàm) |
Ví dụ sử dụng
1. Khởi tạo biến với đối tượng hoặc mảng:
let myObject = null;
let myArray = null;
2. Kiểm tra giá trị:
let value;
if (value === undefined) {
console.log("Biến chưa được khởi tạo.");
}
let result = null;
if (result === null) {
console.log("Không có giá trị.");
}
3. Xóa giá trị:
let person = { name: "Alice" };
person = null; // Giờ person không chỉ định vào đối tượng
4. Kiểm tra thuộc tính tồn tại:
let obj = {};
if (obj.property === undefined) {
console.log("Thuộc tính không tồn tại.");
}
Hiểu sự khác biệt giữa null
và undefined
trong JavaScript là quan trọng để quản lý đúng các giá trị
và tránh các lỗi trong mã.
undefined
thường chỉ ra các biến chưa được khởi tạo hoặc các thuộc tính không tồn tại, trong khi
null
được sử dụng để chỉ ra một cách rõ ràng sự không tồn tại của giá trị.
Việc sử dụng đúng các kiểu dữ liệu đặc biệt này làm cho mã dễ hiểu và dự đoán hơn.
GO TO FULL VERSION