Tôi đang kiểm tra if(response[0].title !== undefined)
, nhưng tôi nhận được lỗi:
Uncaught TypeError: Không thể đọc thuộc tính 'title' của không xác định.
Tôi đang kiểm tra if(response[0].title !== undefined)
, nhưng tôi nhận được lỗi:
Uncaught TypeError: Không thể đọc thuộc tính 'title' của không xác định.
Câu trả lời:
response[0]
không được xác định, kiểm tra nếu nó được xác định và sau đó kiểm tra tiêu đề tài sản của nó.
if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
//Do something
}
undefined
không phải là một từ khóa JavaScript (mặc dù mọi người dường như nghĩ rằng nó là). Nếu bạn muốn, bạn có thể tạo một biến được gọi undefined
và kiểm tra này sẽ không chính xác. Cách duy nhất đúng là kiểm tra (typeof myVar !== 'undefined')
.
undefined
?
Chỉ cần kiểm tra nếu response[0]
không xác định:
if(response[0] !== undefined) { ... }
Nếu bạn vẫn cần kiểm tra rõ ràng tiêu đề, hãy làm như vậy sau lần kiểm tra ban đầu:
if(response[0] !== undefined && response[0].title !== undefined){ ... }
Tôi đã gặp rắc rối với tất cả các ví dụ mã khác ở trên. Trong Chrome, đây là điều kiện phù hợp với tôi:
typeof possiblyUndefinedVariable !== "undefined"
Tôi sẽ phải kiểm tra điều đó trong các trình duyệt khác và xem mọi thứ diễn ra như thế nào.
undefined
phải là một chuỗi.
Trên thực tế, bạn phải bao quanh nó bằng khối Thử / Bắt để mã của bạn không ngừng hoạt động. Như thế này:
try{
if(typeof response[0].title !== 'undefined') {
doSomething();
}
}catch(e){
console.log('responde[0].title is undefined');
}
loại:
var foo;
if (typeof foo == "undefined"){
//do stuff
}
Đó sẽ là vì response[0]
bản thân nó không được xác định.
Trước tiên, bạn phải kiểm tra xem response[0]
có xác định được không và chỉ khi không, hãy kiểm tra phần còn lại. Điều đó có nghĩa là trong trường hợp của bạn, response[0]
không xác định.
Tôi biết tôi đã đến đây muộn 7 tháng, nhưng tôi thấy câu hỏi này và nó có vẻ thú vị. Tôi đã thử điều này trên bảng điều khiển trình duyệt của tôi.
try{x,true}catch(e){false}
Nếu biến x không được xác định, lỗi sẽ bị bắt và nó sẽ sai, nếu không, nó sẽ trả về true. Vì vậy, bạn có thể sử dụng hàm eval để đặt giá trị thành một biến
var isxdefined = eval('try{x,true}catch(e){false}')
Trong một số câu trả lời này có một sự hiểu lầm cơ bản về cách sử dụng typeof
.
Sai
if (typeof myVar === undefined) {
Chính xác
if (typeof myVar === 'undefined') {
Lý do là typeof
trả về một chuỗi. Do đó, bạn nên kiểm tra xem nó trả về chuỗi "không xác định" chứ không phải undefined
(không được đặt trong dấu ngoặc kép), bản thân nó là một trong những kiểu nguyên thủy của JavaScript . Các typeof
nhà điều hành sẽ không bao giờ quay trở lại một giá trị kiểu undefined
.
Phụ lục
Mã của bạn về mặt kỹ thuật có thể hoạt động nếu bạn sử dụng so sánh không chính xác, nhưng có lẽ không phải vì lý do bạn nghĩ. Không có undefined
biến có sẵn trong JavaScript - đó không phải là một loại từ khóa ma thuật mà bạn có thể so sánh. Bạn thực sự có thể tạo một biến được gọi undefined
và cung cấp cho nó bất kỳ giá trị nào bạn muốn.
let undefined = 42;
Và đây là một ví dụ về cách bạn có thể sử dụng điều này để chứng minh phương pháp đầu tiên không chính xác: