Tôi đã xem qua đoạn mã sau:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Tôi hơi mới đối với JavaScript, nhưng, từ những câu hỏi khác mà tôi đã đọc ở đây, tôi có ấn tượng rằng mã này không có nhiều ý nghĩa.
Bạn sẽ gặp lỗi nếu bạn truy cập vào một biến không xác định trong bất kỳ ngữ cảnh nào khác ngoàitypeof
.
Cập nhật: Câu trả lời (trích dẫn) ở trên có thể gây hiểu nhầm. Nó sẽ nói «một biến không được khai báo» , thay vì «một biến không xác định» .
Như tôi đã tìm ra, trong các câu trả lời của Ryan ♦ , maerics và nwellnhof , ngay cả khi không có đối số nào được cung cấp cho hàm, các biến của nó cho các đối số luôn được khai báo. Thực tế này cũng chứng minh sai mục đầu tiên trong danh sách dưới đây.
Theo hiểu biết của tôi, các kịch bản sau đây có thể được trải nghiệm:
Hàm được gọi không có đối số, do đó tạodata
một biến không xác định và gây ra lỗidata != null
.Hàm được gọi cụ thể với
null
(hoặcundefined
), như là đối số của nó, trong trường hợp đódata != null
đã bảo vệ mã bên trong, khiến cho&& data !== undefined
vô dụng.Hàm được gọi với một đối số không null, trong trường hợp đó, nó sẽ vượt qua cả hai
data != null
vàdata !== undefined
.
Q: sự hiểu biết của tôi có đúng không?
Tôi đã thử các cách sau, trong bảng điều khiển của Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Tôi không thể tìm ra một trường hợp mà data !== undefined
sau này data != null
có thể được sử dụng.
if(data)
có nghĩa là anh ta không thể vượt qua false
hoặc 0
làm giá trị cho data
.
if(typeof someUndefVar == whatever) -- works
và if(someUnderVar) -- error
.
data !== null && data !== undefined
, data != null
tương đương với data != undefined
. Hình thức trước có xu hướng được ưa chuộng vì nó rõ ràng hơn về các điều kiện, trong khi đó dễ dàng bỏ qua cả hai null
và undefined
đang được kiểm tra với hai điều kiện sau.
undefined
IMO là một mùi mã. Đây không phải là một từ khóa được bảo vệ như null
, đó là một biến không xác định được. Điều này là hoàn toàn hợp lệ và sẽ phá vỡ mã của bạn:undefined = 1
if (data)
. Đó là cách Javascript thông thường để kiểm tra xemdata
biến có đánh giá đúng không.undefined
,,null
false, 0, chuỗi rỗng, mảng trống và đối tượng (?) không có thuộc tính ước tính thành false, phần còn lại là true.