Do một lỗi lịch sử, typeof null
trong JavaScript trả về "object"
— vậy làm thế nào để bạn kiểm tra null
?
Ảnh của Ben Hershey trên Bapt
null
là gì?“Giá trị
null
thể hiện sự vắng mặt có chủ ý của bất kỳ giá trị đối tượng nào. Nó là một trong những giá trị nguyên thủy của JavaScript. ” — Tài liệu MDN
T kiểu nguyên thủy JavaScript null
thể hiện sự vắng mặt có chủ ý của một giá trị — nó thường được đặt có mục đích để chỉ ra rằng một biến đã được khai báo nhưng chưa được gán bất kỳ giá trị nào.
Điều này trái ngược với null
từ giá trị nguyên thủy tương tự undefined
, đây là sự vắng mặt không chủ ý của bất kỳ giá trị đối tượng nào
Đó là bởi vì một biến đã được khai báo nhưng không được gán bất kỳ giá trị nào là undefined
, không phải null
Thật không may, typeof null
1 trả về "object"
khi được gọi trên giá trị null
do một lỗi lịch sử trong JavaScript sẽ không bao giờ được sửa
Điều đó có nghĩa là việc kiểm tra null không thể được thực hiện bằng cách sử dụng typeof null
1
Ảnh của Eugene Triguba trên Bapt
null
là giả“
null
là một giá trị giả [i. e. nó đánh giá làtypeof null
7 nếu bị ép buộc thành boolean]” — Josh Clanton tại A Drip of JavaScript
T cách đơn giản nhất để kiểm tra null
là biết rằng null
ước tính thành typeof null
7 trong điều kiện hoặc nếu bị ép buộc thành giá trị "object"
1.
Tất nhiên, điều đó không phân biệt null
với các giá trị giả khác
Tiếp theo, tôi khám phá bằng cách sử dụng toán tử đẳng thức "object"
3 hoặc "object"
4 để kiểm tra null
Ảnh của Nicholas Ruggeri trên UnsplashFalsy bình đẳng bằng cách sử dụng
"object"
3“Mặc dù thực tế là
null
là [falsy], nhưng nó không được coi là tương đương với bất kỳ giá trị giả nào khác trong JavaScript. Trên thực tế, các giá trị duy nhất mànull
tương đương một cách lỏng lẻo làundefined
và chính nó. ” —Josh Clanton tại A Drip of JavaScript
O một cách để kiểm tra null
trong JavaScript là kiểm tra xem một giá trị có bằng với null
hay không bằng cách sử dụng toán tử đẳng thức kép null
1.
Như được hiển thị ở trên, null
chỉ tương đối lỏng lẻo với chính nó và undefined
, không phải với các giá trị giả khác được hiển thị
Điều này có thể hữu ích để kiểm tra sự vắng mặt của giá trị - cả null
và undefined
đều biểu thị sự vắng mặt của giá trị, do đó chúng gần như bằng nhau [chúng có cùng giá trị mặc dù chúng là các loại khác nhau]
Vì vậy, khi lập trình để kiểm tra xem một biến có bất kỳ giá trị nào trước khi thử xử lý nó hay không, bạn có thể sử dụng null
6 để kiểm tra null
hoặc undefined
Ảnh của David Becker trên UnsplashStrict bình đẳng bằng cách sử dụng
"object"
4To đảm bảo rằng chúng tôi có chính xác giá trị null
, loại trừ bất kỳ giá trị undefined
nào, sử dụng toán tử null
2 đẳng thức ba sẽ thực hiện thủ thuật.
Nói chung, nên nắm bắt cả hai giá trị null
và undefined
, vì cả hai đều đại diện cho việc không có giá trị
Điều đó có nghĩa là việc kiểm tra null
là một trong số ít lần trong JavaScript khuyến nghị sử dụng "object"
3, trong khi nếu không thì thường khuyến nghị sử dụng null
2
S một số lập trình viên JavaScript thích mọi thứ phải rõ ràng và không có gì sai với điều đó.
Thật vậy, kẻ nói dối mã JSLint rõ ràng không cho phép null
8 để ngăn chặn các lỗi ngẫu nhiên do ép buộc kiểu
Một kẻ nói dối mã phổ biến khác, ESLint, có hành vi tương tự nhưng dễ cấu hình hơn xung quanh việc sử dụng "object"
3 so với. "object"
4
Điều đó có nghĩa là nếu bạn [hoặc kẻ nói dối của bạn] có thói quen luôn sử dụng toán tử đẳng thức nghiêm ngặt "object"
4, thì bạn có thể kiểm tra xem một giá trị có hoàn toàn bằng null HOẶC [null
2] hoàn toàn bằng không xác định thay vì sử dụng "object"
3
Nó dài dòng hơn toán tử "object"
3, nhưng tất cả những ai đọc mã của bạn sẽ biết rõ ràng rằng cả null
và undefined
đều đang được kiểm tra
Ảnh của Cassie Boca trên BaptMột ví dụ thực tế về thời điểm kiểm tra null
“Một cách lỗi này [‘null is not an object’] có thể xảy ra trong một ví dụ thực tế là nếu bạn thử sử dụng một phần tử DOM trong JavaScript của mình trước khi phần tử được tải. Đó là bởi vì API DOM trả về
null
cho các tham chiếu đối tượng trống. ” — Rollbar trên 10 lỗi JavaScript hàng đầu
T TypeError [“null
không phải là đối tượng”] của anh ấy có thể xảy ra nếu các phần tử DOM chưa được tạo trước khi tải tập lệnh, chẳng hạn như nếu tập lệnh cao hơn HTML .
Giải pháp sẽ là sử dụng trình xử lý sự kiện sẽ thông báo cho chúng tôi khi trang sẵn sàng và sau đó chạy tập lệnh
Tuy nhiên, có thể nên thận trọng kiểm tra xem phần tử DOM có phải là null
hay không trước khi thử truy cập nó
Ảnh của Denys Nevozhai trên Bapt
“Rất may vì
null
không thực sự là một đối tượng, nó là 'đối tượng' duy nhất có giá trị giả, các đối tượng trống là trung thực. ” — Casey Morris trong Daily JS
A không có phương pháp kiểm tra null
nào khác dựa trên thực tế là null
là giả, nhưng các đối tượng trống là trung thực, vì vậy chỉ có duy nhất null
là đối tượng giả.
Điều này có thể được kiểm tra một cách thuận tiện bằng cách sử dụng toán tử logic NOT null
4
Sử dụng typeof null
1 có thể là một thủ thuật hữu ích, bởi vì nếu một biến không được khai báo, thì việc cố gắng tham chiếu nó sẽ tạo ra một kết quả null
6
Tuy nhiên, giá trị không được khai báo của typeof null
1 là undefined
, vì vậy sử dụng typeof null
1 có thể là một cách hay để kiểm tra các biến null
, undefined
và không được khai báo
Ảnh của Dylan Freedom trên Bapt Sử dụng
null
2T hàm ES6 null
3 khác với các toán tử đẳng thức null
2 nghiêm ngặt và null
1 lỏng lẻo trong cách nó kiểm tra null
6 và số 0 âm null
7.
Đối với null, hành vi của null
2 giống như "object"
4
Điều đó có nghĩa là bạn sẽ cần kiểm tra rõ ràng cả null
và undefined
nếu bạn đang sử dụng null
2, đây là phương thức trợ giúp kiểm tra các thay đổi về trạng thái ẩn trong React
Ảnh của Patrick Hendry trên BaptKết luận
C tìm kiếm null là một nhiệm vụ phổ biến mà mọi nhà phát triển JavaScript phải thực hiện vào lúc này hay lúc khác.
Từ khóa typeof null
1 trả về "object"
cho null
, vì vậy điều đó có nghĩa là cần thêm một chút nỗ lực
So sánh có thể được thực hiện. undefined
6 để kiểm tra nghiêm ngặt về null hoặc undefined
7 để kiểm tra lỏng lẻo về null hoặc không xác định
Giá trị null
là giả, nhưng các đối tượng trống là trung thực, vì vậy undefined
9 là một cách dễ dàng để kiểm tra xem giá trị có phải là null
không
Cuối cùng, để kiểm tra xem một giá trị đã được khai báo và gán một giá trị không phải là null
hay undefined
hay chưa, hãy sử dụng typeof null
1