Uji apakah ada sesuatu yang tidak terdefinisi dalam JavaScript

Jawaban:

345

response[0] tidak ditentukan, periksa apakah sudah ditentukan lalu periksa judul propertinya.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
amosrivera
sumber
20
Terlepas dari jumlah suara, ini bukan cara yang baik untuk melakukan pemeriksaan karena undefinedbukan kata kunci JavaScript (meskipun semua orang tampaknya berpikir demikian). Jika Anda mau, Anda bisa membuat variabel bernama undefineddan pemeriksaan ini akan salah. Satu-satunya cara yang benar adalah dengan memeriksa (typeof myVar !== 'undefined').
BadHorsie
4
@BadHorsie masuk akal, saya memperbarui jawabannya dengan komentar Anda.
amosrivera
1
Bagaimana jika ada variabel dan berisi string yang bertuliskan 'tidak terdefinisi'?
TomeeNS
@BadHorsie Argumen Anda palsu. Mengapa saya harus mendefinisikan ulang undefined?
Robert Siemer
@amosrivera Tidak, komentarnya tidak masuk akal. Anda memperburuk jawaban Anda.
Robert Siemer
39

Periksa apakah response[0]tidak terdefinisi:

if(response[0] !== undefined) { ... }

Jika Anda masih perlu memeriksa judul secara eksplisit, lakukan setelah pemeriksaan awal:

if(response[0] !== undefined && response[0].title !== undefined){ ... }
Rion Williams
sumber
35

Saya mengalami masalah dengan semua contoh kode lainnya di atas. Di Chrome, ini adalah kondisi yang berfungsi untuk saya:

typeof possiblyUndefinedVariable !== "undefined"

Saya harus mengujinya di browser lain dan melihat bagaimana keadaannya saya kira.

Karl Henselin
sumber
2
Sama - saya temukan undefinedharus menjadi string.
Remarsh
ini pasti sesuatu yang baru dengan chrome (saya menang win chrome 41 atm). jawaban yang diterima digunakan untuk bekerja dengan baik! : P
joe
13

Sebenarnya Anda harus mengelilinginya dengan blok Coba / Tangkap agar kode Anda tidak berhenti bekerja. Seperti ini:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
André Luiz
sumber
Saya melihat IE 8 dan perlu mencoba tangkapan.
RonanOD
1
ini adalah cara terbaik jika Anda menguji apakah suatu fungsi tidak ditentukan
edepperson
melempar kesalahan untuk memeriksa tidak terdefinisi bukanlah solusi yang baik. @amosrivera adalah solusi terbaik.
user3658423
@ user3658423: Itu tidak menimbulkan kesalahan. Itu hanya mencegah skrip berhenti jika respons tidak dideklarasikan (karena itu akan menimbulkan kesalahan).
André Luiz
Terkadang kesalahan bisa membantu. Dengan solusi yang Anda usulkan, jika doSomething () melempar pengecualian, semua yang akan Anda lihat di konsol Anda adalah "responde [0] .title tidak terdefinisi", alih-alih pesan yang berguna tentang "pengecualian yang tidak ditangkap @ baris 123 dari file xyz .js ". Akhirnya pengembang kedua mungkin akan mengomentari pernyataan console.log (), membuatnya lebih sulit bagi pengembang ketiga untuk masuk dan memperbaiki bug yang terjadi jauh di dalam doSomething ().
Eric Seastrand
9

jenis:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}
Jeffrey Mark Baldridge
sumber
1

Itu karena response[0]itu sendiri tidak terdefinisi.

DavidGouge
sumber
1

Periksa apakah condition == null; Itu akan menyelesaikan masalah

Tanmay Chandra
sumber
1
Ini harus menjadi komentar
ρяσѕρєя K
0

Periksa apakah Anda response[0]benar - benar ada, kesalahannya sepertinya tidak.

Exelian
sumber
0

Anda harus terlebih dahulu memeriksa apakah response[0]tidak terdefinisi, dan hanya jika tidak, periksa sisanya. Itu berarti bahwa dalam kasus Anda, response[0]tidak ditentukan.

Alex Turpin
sumber
0

Saya tahu saya terlambat ke sini 7 bulan, tetapi saya menemukan pertanyaan ini dan itu terlihat menarik. Saya mencoba ini di konsol browser saya.

try{x,true}catch(e){false}

Jika variabel x tidak terdefinisi, kesalahan ditangkap dan itu akan salah, jika tidak, itu akan mengembalikan true. Jadi Anda bisa menggunakan fungsi eval untuk mengatur nilai ke variabel

var isxdefined = eval('try{x,true}catch(e){false}')
AngeLOL
sumber
1
Pendekatan yang menarik jika saya bisa mengatakannya sendiri.
Brandito
0

Dalam beberapa jawaban ini ada kesalahpahaman mendasar tentang cara menggunakan typeof.

Salah

if (typeof myVar === undefined) {

Benar

if (typeof myVar === 'undefined') {

Alasannya adalah typeofmengembalikan string. Karena itu, Anda harus memeriksa apakah ia mengembalikan string "tidak terdefinisi" daripadaundefined (tidak terlampir dalam tanda kutip), yang merupakan salah satu dari jenis primitif JavaScript . The typeofOperator tidak akan pernah kembali nilai tipe undefined.


Tambahan

Kode Anda mungkin secara teknis berfungsi jika Anda menggunakan perbandingan yang salah, tetapi mungkin bukan karena alasan yang Anda pikirkan. Tidak ada yang sudah ada sebelumnyaundefined variabel yang dalam JavaScript - ini bukan semacam kata kunci ajaib yang dapat Anda bandingkan. Anda benar-benar dapat membuat variabel yang disebut undefineddan memberikan nilai apa pun yang Anda suka.

let undefined = 42;

Dan berikut ini adalah contoh bagaimana Anda dapat menggunakan ini untuk membuktikan metode pertama salah:

https://jsfiddle.net/p6zha5dm/

BadHorsie
sumber