Di PHP bisa Anda lakukan if(isset($array['foo'])) { ... }
. Dalam JavaScript Anda sering menggunakan if(array.foo) { ... }
untuk melakukan hal yang sama, tetapi ini bukan pernyataan yang persis sama. Kondisi ini juga akan bernilai false jika array.foo
ada tetapi ada false
atau 0
(dan mungkin juga nilai lainnya).
Apa yang setara dengan PHP isset
di JavaScript?
Dalam arti yang lebih luas, panduan umum dan lengkap tentang penanganan JavaScript atas variabel yang tidak ada, variabel tanpa nilai, dll. Akan lebih mudah.
javascript
isset
Bart van Heukelom
sumber
sumber
_.isUndefined(arr.foo)
Jawaban:
Saya biasanya menggunakan
typeof
operator:Ini akan kembali
"undefined"
jika properti tidak ada atau nilainyaundefined
.(Lihat juga: Perbedaan antara
undefined
dan tidak didefinisikan. )Ada cara lain untuk mengetahui apakah properti ada pada objek, seperti
hasOwnProperty
metode:Dan
in
operator:Perbedaan antara dua yang terakhir adalah bahwa
hasOwnProperty
metode akan memeriksa apakah properti ada secara fisik pada objek (properti tidak diwarisi).The
in
Operator akan memeriksa semua properti dicapai dalam rantai prototipe, misalnya:Seperti yang Anda lihat,
hasOwnProperty
kembalifalse
danin
operator kembalitrue
ketika memeriksatoString
metode, metode ini didefinisikan dalam rantai prototipe, karenaobj
mewarisi bentukObject.prototype
.sumber
typeof
bukanif( obj.foo !== undefined )
?isset($abc->def->ghi->jkl)
tanpa memunculkan pengecualian dan menghentikan skrip, tidak sepertitypeof
operator JavaScript . Anda harus menggunakan sesuatu sepertitry{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
Umur utas lama, tetapi ada cara baru untuk menjalankan yang setara
isset()
.ESNext (Tahap 4 Desember 2019)
Dua sintaks baru memungkinkan kami untuk sangat menyederhanakan penggunaan
isset()
fungsi:?.
)??
)Harap baca dokumen dan perhatikan kompatibilitas browser.
Jawaban Sebelumnya
Lihat penjelasan di bawah ini. Catatan saya menggunakan sintaks StandardJS
Contoh Penggunaan
Fungsi Jawab
Penjelasan
PHP
Perhatikan bahwa dalam PHP Anda dapat mereferensikan variabel apa pun pada kedalaman apa pun - bahkan mencoba mengakses non-array sebagai array akan mengembalikan yang sederhana
true
ataufalse
:JS
Dalam JavaScript, kami tidak memiliki kebebasan itu, kami akan selalu mendapatkan kesalahan jika kami melakukan hal yang sama karena JS segera berusaha mengakses nilai
deeper
sebelum kami dapat membungkusnya dalamisset()
fungsi kami jadi ...Alternatif yang lebih banyak gagal:
Dan beberapa alternatif kerja yang bisa menjadi redundan dengan cepat:
Kesimpulan
Semua jawaban lain - meskipun sebagian besar layak ...
isset()
misalnya
isset(some, 'nested.deeper.value')
eval()
yang berfungsi tetapi saya pribadi hindariSaya pikir saya sudah membahas banyak hal. Ada beberapa poin yang saya buat dalam jawaban saya yang tidak saya sentuh karena mereka - meskipun relevan - bukan bagian dari pertanyaan. Namun, jika perlu, saya dapat memperbarui jawaban saya dengan tautan ke beberapa aspek yang lebih teknis berdasarkan permintaan.
Saya menghabiskan banyak waktu untuk hal ini sehingga mudah-mudahan ini membantu orang keluar.
Terima kasih telah membaca!
sumber
phpjs.org sebagian besar pensiun karena locutus. Berikut ini tautan baru http://locutus.io/php/var/isset
sumber
isset(abc.def.ghi)
seandainyaabc.def
tidak terdefinisi. Namun dengan menggabungkan solusi ini dengan yang menerima nama variabel dalam bentuk string, itu akan identik dengan versi PHP.sumber
sumber
Solusi sederhana ini berfungsi, tetapi tidak untuk pemeriksaan objek dalam.
sumber
Saya selalu menggunakan fungsi generik ini untuk mencegah kesalahan pada variabel primitif serta array dan objek.
sumber
Jika Anda menggunakan underscorejs, saya selalu menggunakan
sumber
Ini adalah solusi yang cukup anti peluru untuk pengujian jika ada variabel:
Sayangnya, Anda tidak bisa hanya merangkumnya dalam suatu fungsi.
Anda mungkin berpikir untuk melakukan sesuatu seperti ini:
Namun, ini akan menghasilkan kesalahan referensi jika variabel
variable
belum didefinisikan, karena Anda tidak bisa meneruskan variabel yang tidak ada ke suatu fungsi:Di sisi lain, ini memungkinkan Anda untuk menguji apakah parameter fungsi tidak terdefinisi:
Meskipun tidak ada nilai untuk
y
diteruskan ke fungsitest
,isset
fungsi kami berfungsi dengan baik dalam konteks ini, karenay
dikenal dalam fungsitest
sebagaiundefined
nilai.sumber
!==
sudah boolean.Terlalu panjang untuk menulis saat digunakan. Tetapi kami tidak dapat mengemas
typeof
kata kunci ke dalam suatu fungsi, karena kesalahan akan terjadi sebelum fungsi dipanggil, seperti ini:Jadi saya menemukan cara:
Ia dapat bekerja baik dengan variabel individual (variabel yang tidak ada sama sekali), atau properti objek (properti tidak ada). Dan hanya 7 karakter lebih banyak dari PHP
isset
.sumber
Solusi ini berhasil untuk saya.
sumber
isset(var)
denganvar
tidak disetel:ReferenceError: var is not defined
sumber
isset(someVar)
, di manasomeVar
tidak pernah dinyatakan. Namun mengingat bahwa Anda lakukaneval
, Anda mungkin berniat string yang akan disahkan dalam. Tampilkan penggunaan. Apakah tujuan penggunaan Andaisset('someVar')
? Jika demikian, ini terlihat mirip dengan jawaban sebelumnya - bagaimana dengan jawaban Anda yang baru?plus Tes:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
sumber
Untuk memeriksa apakah blok html ada atau tidak, saya menggunakan kode ini:
sumber
Berikan path objek sebagai string, maka Anda dapat memecah string ini menjadi path dan menyelesaikan
hasOwnProperty
pada setiap langkah sambil menimpa objek itu sendiri dengan setiap iterasi.Jika Anda mengkode dalam lingkungan ES6, lihat Ques stackoverflow ini .
sumber
Saya menggunakan fungsi yang dapat memeriksa variabel dan objek. sangat nyaman untuk bekerja dengan jQuery
sumber
Itu benar-benar masalah bagi saya ketika saya mengakses properti yang lebih dalam dari suatu objek jadi saya membuat fungsi yang akan mengembalikan nilai properti jika ada, jika tidak maka akan kembali salah. Anda dapat menggunakannya untuk menghemat waktu Anda,
sumber
Jika Anda ingin memeriksa apakah suatu elemen ada, gunakan saja kode berikut:
Ini adalah contoh:
sumber
sumber
Manual PHP mengatakan:
Dan antarmuka seperti ini:
bool isset ( mixed $var [, mixed $... ] )
Parameter
$var
adalah variabel yang akan diperiksa. itu dapat memiliki sejumlah parameter.isset () mengembalikan
TRUE
jika var ada dan memiliki nilai selainNULL
.FALSE
jika tidak.Beberapa contoh:
Karena ini dalam pikiran, Rupanya, itu tidak mungkin untuk menulis persis sama dengan
isset()
fungsi php . Misalnya ketika kita memanggil seperti ini:Pemicu Javascript
Uncaught ReferenceError: some_var is not defined at (file_name):line_number
. Hal penting dan luar biasa tentang perilaku ini adalah bahwa ketika mencoba meneruskan variabel yang tidak ada ke fungsi normal, kesalahan dipicu.Tetapi dalam PHP
isset()
sebenarnya bukan fungsi biasa tetapi konstruksi bahasa. Itu berarti mereka bagian dari bahasa PHP itu sendiri, tidak bermain dengan aturan fungsi normal dan karenanya bisa lolos dengan tidak memicu kesalahan untuk variabel yang tidak ada. Ini penting ketika mencoba mencari tahu apakah suatu variabel ada atau tidak. Tetapi dalam javascript, memicu kesalahan di tempat pertama mengatakan panggilan fungsi dengan variabel tidak ada.Maksud saya adalah bahwa kita tidak dapat menulisnya sebagai fungsi javscript yang sama tetapi kita dapat melakukan sesuatu seperti ini
Jika Anda ingin efek yang sama persis PHP juga memeriksa varable tidak
NULL
Sebagai contoh
Jadi, kita bisa memasukkan ini ke dalam javascript maka akan terlihat seperti ini:
sumber
penerbit javascript
sumber
Hati-hati dalam ES6 , semua solusi sebelumnya tidak berfungsi jika Anda ingin memeriksa deklarasi variabel let dan mendeklarasikannya, jika tidak
contoh
Anda akan melihat kesalahan
Solusinya adalah mengubahnya dengan var
solusi lain jika Anda dapat mengubah let oleh var, Anda harus menghapus var Anda
sumber
sumber