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
}

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){ ... }

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.


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'); 
  }

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




0

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


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.


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}')

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/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.