Trong JavaScript, có hai giá trị về cơ bản nói rằng 'Tôi không tồn tại' - undefined
và null
.
Một thuộc tính mà một lập trình viên chưa gán bất cứ thứ gì sẽ là undefined
, nhưng để một thuộc tính trở thành null
thì null
phải được gán rõ ràng cho nó.
Tôi đã từng nghĩ rằng cần có null
bởi vì undefined
là một giá trị nguyên thủy và null
một đối tượng. Nó không phải, ngay cả khi typeof null
sẽ mang lại 'object'
: Trên thực tế, cả hai đều là giá trị nguyên thủy - có nghĩa là cả hai đều undefined
không null
thể trả về từ một hàm tạo, vì cả hai sẽ được chuyển đổi thành một đối tượng trống (người ta phải ném một lỗi để thông báo lỗi trong các hàm tạo).
Cả hai đều đánh giá false
trong ngữ cảnh boolean. Sự khác biệt thực sự duy nhất mà tôi có thể nghĩ đến là một cái đánh giá NaN
, cái kia đánh giá 0
trong ngữ cảnh số.
Vì vậy, tại sao lại có cả hai undefined
và null
nếu điều này chỉ gây nhầm lẫn cho các lập trình viên, những người đang kiểm tra sai null
khi cố gắng tìm hiểu xem một thuộc tính đã được thiết lập hay chưa?
Điều tôi muốn biết là nếu có ai có một ví dụ hợp lý cần thiết để sử dụng null
mà không thể diễn đạt bằng cách sử dụng undefined
thay thế.
Vì vậy, sự đồng thuận chung dường như có undefined
nghĩa là 'không có tài sản đó' trong khi null
có nghĩa là 'tài sản tồn tại, nhưng không có giá trị gì'.
Tôi có thể sống với điều đó nếu các triển khai JavaScript thực sự thực thi hành vi này - nhưng undefined
là một giá trị nguyên thủy hoàn toàn hợp lệ, vì vậy nó có thể dễ dàng được gán cho các thuộc tính hiện có để phá vỡ hợp đồng này. Do đó, nếu bạn muốn chắc chắn rằng một thuộc tính có tồn tại hay không, bạn phải sử dụng in
toán tử hoặc bằng hasOwnProperty()
mọi cách. Vì vậy, một lần nữa: việc sử dụng thực tế cho các giá trị riêng biệt cho undefined
và là null
gì?
Tôi thực sự sử dụng undefined
khi tôi muốn bỏ đặt giá trị của các thuộc tính không còn được sử dụng nữa nhưng tôi không muốn delete
. Tôi có nên sử dụng null
thay thế không?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
Không, chỉ undefined
nói vậy.
undefined
.