Phụ lục cho câu trả lời được chấp nhận để hiểu tại sao nó không hoạt động với một số ví dụ bạn có thể tự thử trong bảng điều khiển javascript.
So sánh trực tiếp với loại không xác định chỉ hoạt động nếu biến tồn tại. Dưới đây là kết quả bạn sẽ nhận được từ trình duyệt Google Chrome:
> task === undefined
ReferenceError: task is not defined
Tuy nhiên nếu biến tồn tại nó sẽ làm việc:
// continued from above
> var task
undefined
> task === undefined
true
Đây là lý do tại sao bạn nên sử dụng giải pháp thay typeof
bởi vì nó sẽ làm việc trong tất cả trường hợp không có lỗi (và phá vỡ việc thực thi mã javascript).
// continued from above
> typeof notavariable === 'undefined'
true
> typeof task === 'undefined'
true
Lưu ý rằng bạn không cần phải kiểm tra typeof
trong một số trường hợp, chẳng hạn như các thuộc tính trong một đối tượng theo nghĩa đen:
// continued from above
> var obj = {}
undefined
> obj.test === undefined
true
> obj.test = 1
1
> obj.test === undefined
false
Điều này là do các thuộc tính trong một đối tượng cư xử giống như các giá trị trong một mảng kết hợp:
// continued from above
> obj["test"]
1
> obj["test"] === undefined
false
Tuy nhiên bạn có thể không phải luôn luôn chắc chắn đây là một trường hợp trong một chức năng mà bạn không có quyền kiểm soát đầu vào đối số:
// continued from above
> function TestFunc(arg1) { console.log(arg1) }
undefined
> TestFunc(notavariable)
ReferenceError: notavariable is not defined
> TestFunc(task)
undefined
undefined
> TestFunc(obj["lol"])
undefined
undefined
Hy vọng bài tập này sẽ giúp bạn hiểu được lý do tại sao so sánh này.
Cảm ơn bạn! Tại sao JavaScript không chỉ khai báo tác vụ không xác định, vì nó là nghĩa đen không xác định? – Fawkes5
Như tôi đã đề cập, bạn không thể sử dụng tên 'tác vụ' nếu nó không được xác định, nó sẽ tăng một ngoại lệ như bạn đã thấy. 'typeof' là đặc biệt. Và Javascript đã tuyên bố nó không xác định, nó đã làm nó bằng cách nâng cao lỗi! –
@ Fawkes5: có sự khác biệt giữa "biến tồn tại nhưng có giá trị' undefined' "và" biến không tồn tại chút nào ". – nnnnnn