Apa cara terbaik untuk memeriksa apakah properti objek dalam JavaScript adalah undefined
?
sumber
Apa cara terbaik untuk memeriksa apakah properti objek dalam JavaScript adalah undefined
?
Cara biasa untuk memeriksa apakah nilai properti adalah nilai spesial undefined
, adalah:
if(o.myProperty === undefined) {
alert("myProperty value is the special value `undefined`");
}
Untuk memeriksa apakah suatu objek tidak benar-benar memiliki properti seperti itu, dan karena itu akan kembali undefined
secara default ketika Anda mencoba dan mengaksesnya:
if(!o.hasOwnProperty('myProperty')) {
alert("myProperty does not exist");
}
Untuk memeriksa apakah nilai yang terkait dengan pengidentifikasi adalah nilai khusus undefined
, atau jika pengidentifikasi tersebut belum dinyatakan. Catatan: metode ini adalah satu-satunya cara merujuk ke pengidentifikasi yang tidak dideklarasikan (note: berbeda dengan memiliki nilai undefined
) tanpa kesalahan awal:
if(typeof myVariable === 'undefined') {
alert('myVariable is either the special value `undefined`, or it has not been declared');
}
Dalam versi JavaScript sebelum ECMAScript 5, properti bernama "tidak terdefinisi" pada objek global dapat ditulisi, dan oleh karena itu pemeriksaan sederhana foo === undefined
mungkin berperilaku tidak terduga jika secara tidak sengaja telah didefinisikan ulang. Dalam JavaScript modern, properti ini hanya baca.
Namun, dalam JavaScript modern, "tidak terdefinisi" bukan kata kunci, sehingga variabel di dalam fungsi dapat dinamai "tidak terdefinisi" dan membayangi properti global.
Jika Anda khawatir tentang kasing tepi (tidak mungkin) ini, Anda dapat menggunakan operator void untuk mendapatkan nilai spesial undefined
itu sendiri:
if(myVariable === void 0) {
alert("myVariable is the special value `undefined`");
}
obj !== undefined
sekarang.undefined
dulu bisa berubah, sepertiundefined = 1234
apa yang akan menyebabkan hasil yang menarik. Tetapi setelah Ecmascript 5, itu tidak bisa ditulisi lagi, jadi kita bisa menggunakan versi yang lebih sederhana. codereadability.com/how-to-check-for-undefined-in-javascriptSaya percaya ada sejumlah jawaban yang salah untuk topik ini. Bertentangan dengan kepercayaan umum, "tidak terdefinisi" bukanlah kata kunci dalam JavaScript dan sebenarnya dapat memiliki nilai yang ditetapkan untuk itu.
Kode yang benar
Cara paling kuat untuk melakukan tes ini adalah:
Ini akan selalu mengembalikan hasil yang benar, dan bahkan menangani situasi di mana
myVar
tidak dinyatakan.Kode degenerasi. JANGAN GUNAKAN.
Selain itu,
myVar === undefined
akan memunculkan kesalahan dalam situasi di mana myVar tidak dideklarasikan.sumber
=== undefined
membingungkan. Ya, Anda dapat menetapkanundefined
, tetapi tidak ada alasan yang sah untuk melakukannya, dan dapat diprediksi bahwa hal itu dapat merusak kode Anda. Dalam C Anda bisa#define true false
, dan dengan Python Anda dapat menetapkan untukTrue
danFalse
, tetapi orang tidak merasa perlu untuk merancang kode mereka dalam bahasa-bahasa tersebut sedemikian rupa untuk melindungi terhadap kemungkinan diri mereka dengan sengaja menyabot lingkungan mereka sendiri di tempat lain dalam kode . Mengapa kemungkinan penugasanundefined
bahkan layak dipertimbangkan di sini?void 0
untuk mendapatkan nilai yangundefined
menunjuk. Jadi kamu bisa melakukannyaif (myVar === void 0)
. yang0
tidak spesial, Anda benar-benar dapat menempatkan ekspresi apa pun di sana.undefined
. MDN: tidak terdefinisiMeskipun direkomendasikan dengan keras oleh banyak jawaban lain di sini,
typeof
adalah pilihan yang buruk . Itu tidak boleh digunakan untuk memeriksa apakah variabel memiliki nilaiundefined
, karena itu bertindak sebagai cek gabungan untuk nilaiundefined
dan untuk apakah suatu variabel ada. Dalam sebagian besar kasus, Anda tahu kapan variabel ada, dantypeof
hanya akan memperkenalkan potensi kegagalan diam jika Anda membuat kesalahan ketik pada nama variabel atau dalam string literal'undefined'
.Jadi, kecuali Anda melakukan deteksi fitur², di mana ada ketidakpastian apakah nama yang diberikan akan berada dalam lingkup (seperti memeriksa
typeof module !== 'undefined'
sebagai langkah dalam kode khusus untuk lingkungan CommonJS),typeof
adalah pilihan yang berbahaya ketika digunakan pada variabel, dan opsi yang benar adalah untuk membandingkan nilai secara langsung:Beberapa kesalahpahaman umum tentang ini termasuk:
bahwa membaca variabel "tidak diinisialisasi" (
var foo
) atau parameter (function bar(foo) { … }
, disebut sebagaibar()
) akan gagal. Ini tidak benar - variabel tanpa inisialisasi eksplisit dan parameter yang tidak diberi nilai selalu menjadiundefined
, dan selalu dalam cakupan.yang
undefined
bisa ditimpa. Ada banyak lagi untuk ini.undefined
bukan kata kunci dalam JavaScript. Alih-alih, ini adalah properti pada objek global dengan nilai Undefined. Namun, sejak ES5, properti ini hanya-baca dan tidak dapat dikonfigurasi . Tidak ada peramban modern yang memungkinkanundefined
properti diubah, dan pada 2017 ini sudah lama terjadi. Kurangnya mode ketat juga tidak memengaruhiundefined
perilaku - itu hanya membuat pernyataan sepertiundefined = 5
tidak melakukan apa pun alih-alih melempar. Karena itu bukan kata kunci, Anda dapat mendeklarasikan variabel dengan namaundefined
, dan variabel-variabel itu dapat diubah, membuat pola yang dulu umum ini:lebih berbahaya daripada menggunakan global
undefined
. Jika Anda harus kompatibelundefined
dengan ES3, ganti denganvoid 0
- jangan gunakantypeof
. (void
selalu menjadi operator unary yang mengevaluasi nilai Undefined untuk setiap operan.)Dengan cara variabel bekerja, saatnya untuk menjawab pertanyaan aktual: properti objek. Tidak ada alasan untuk menggunakan
typeof
properti objek. Pengecualian sebelumnya tentang deteksi fitur tidak berlaku di sini -typeof
hanya memiliki perilaku khusus pada variabel, dan ekspresi bahwa properti objek referensi bukan variabel.Ini:
adalah selalu persis sama ke this³:
dan dengan mempertimbangkan saran di atas, untuk menghindari pembaca yang bingung tentang mengapa Anda menggunakan
typeof
, karena itu paling masuk akal===
untuk memeriksa kesetaraan, karena bisa direactored untuk memeriksa nilai variabel nanti, dan karena itu hanya sekadar terlihat lebih baik, Anda harus selalu menggunakan=== undefined
³ di sini juga .Hal lain yang perlu dipertimbangkan ketika datang ke properti objek adalah apakah Anda benar-benar ingin memeriksa
undefined
sama sekali. Nama properti yang diberikan dapat tidak ada pada objek (menghasilkan nilaiundefined
saat membaca), hadir pada objek itu sendiri dengan nilaiundefined
, hadir pada prototipe objek dengan nilaiundefined
, atau hadir pada salah satu dari mereka yang tidakundefined
bernilai.'key' in obj
akan memberi tahu Anda apakah kunci ada di mana saja di rantai prototipe objek, danObject.prototype.hasOwnProperty.call(obj, 'key')
akan memberi tahu Anda apakah itu langsung di objek. Saya tidak akan menjelaskan secara terperinci dalam jawaban ini tentang prototipe dan menggunakan benda-benda sebagai peta kunci-string, karena itu sebagian besar dimaksudkan untuk melawan semua saran buruk dalam jawaban lain terlepas dari kemungkinan interpretasi dari pertanyaan asli. Baca terusobjek prototipe di MDN untuk lebih!¹ pilihan contoh nama variabel yang tidak biasa? ini kode mati asli dari ekstensi NoScript untuk Firefox.
² jangan berasumsi bahwa tidak mengetahui apa yang ada dalam ruang lingkup secara umum, oke. kerentanan bonus yang disebabkan oleh penyalahgunaan ruang lingkup dinamis: Project Zero 1225
³ sekali lagi mengasumsikan lingkungan ES5 + dan yang
undefined
mengacu padaundefined
properti objek global. gantikanvoid 0
sebaliknya.sumber
undefined
, menyembunyikan yang default. Yang untuk tujuan paling praktis memiliki efek yang sama dengan menimpanya.void 0
untuk membandingkan dengan yang tidak ditentukan tapi sekali lagi - itu konyol dan berlebihan.typeof something === "undefined")
kode.void 0
(untuk sekali) keduanya lebih pendek dan lebih aman! Itu kemenangan dalam buku saya.Dalam JavaScript ada null dan ada undefined . Mereka memiliki arti yang berbeda.
Marijn Haverbeke menyatakan, dalam bukunya yang gratis dan online, " Eloquent JavaScript " (penekanan saya):
Jadi, saya kira cara terbaik untuk memeriksa apakah ada sesuatu yang tidak didefinisikan adalah:
Semoga ini membantu!
Sunting: Menanggapi sunting Anda, properti objek harus bekerja dengan cara yang sama.
sumber
undefined
hanyalah sebuah variabel yang dapat ditugaskan kembali oleh pengguna: menulisundefined = 'a';
akan menyebabkan kode Anda tidak lagi melakukan apa yang Anda pikirkan. Menggunakantypeof
lebih baik dan juga berfungsi untuk variabel (bukan hanya properti) yang belum dideklarasikan.Apa artinya ini: "properti objek tidak terdefinisi" ?
Sebenarnya itu bisa berarti dua hal yang sangat berbeda! Pertama, itu bisa berarti properti yang belum pernah didefinisikan dalam objek dan, kedua, itu bisa berarti properti yang memiliki nilai yang tidak ditentukan . Mari kita lihat kode ini:
Apakah
o.a
tidak terdefinisi? Iya! Nilainya tidak terdefinisi. Apakaho.b
tidak terdefinisi? Tentu! Tidak ada properti 'b' sama sekali! OK, lihat sekarang bagaimana berbagai pendekatan berbeda dalam kedua situasi:Kita dapat dengan jelas melihat itu
typeof obj.prop == 'undefined'
danobj.prop === undefined
setara, dan mereka tidak membedakan situasi yang berbeda itu. Dan'prop' in obj
dapat mendeteksi situasi ketika properti belum didefinisikan sama sekali dan tidak memperhatikan nilai properti yang mungkin tidak ditentukan.Jadi apa yang harus dilakukan?
1) Anda ingin tahu apakah sebuah properti tidak terdefinisi dengan makna pertama atau kedua (situasi paling umum).
2) Anda hanya ingin tahu apakah objek memiliki properti dan tidak peduli nilainya.
Catatan:
x.a === undefined
atau initypeof x.a == 'undefined'
munculReferenceError: x is not defined
jika x tidak didefinisikan.undefined
adalah variabel global (jadi sebenarnya adawindow.undefined
di browser). Ini telah didukung sejak ECMAScript Edisi Pertama dan sejak ECMAScript 5 hanya dibaca . Jadi di browser modern, itu tidak dapat didefinisikan ulang menjadi benar karena banyak penulis suka menakuti kami, tetapi ini masih berlaku untuk browser yang lebih lama.Pertarungan terakhir:
obj.prop === undefined
vstypeof obj.prop == 'undefined'
Plus dari
obj.prop === undefined
:undefined
Kekurangan dari
obj.prop === undefined
:undefined
dapat diganti di browser lamaPlus dari
typeof obj.prop == 'undefined'
:Kekurangan dari
typeof obj.prop == 'undefined'
:'undefned'
( salah eja ) di sini hanyalah string konstan, jadi mesin JavaScript tidak dapat membantu Anda jika Anda salah mengeja seperti yang baru saja saya lakukan.Pembaruan (untuk JavaScript sisi-server):
Node.js mendukung variabel global
undefined
sebagaiglobal.undefined
(itu juga dapat digunakan tanpa awalan 'global'). Saya tidak tahu tentang implementasi lain dari JavaScript sisi server.sumber
undefined
sebagai anggotaglobal
. Juga tidakconsole.log(global);
jugafor (var key in global) { ... }
tidak menunjukkan tidak terdefinisi sebagai anggota global . Tapi tes suka'undefined' in global
menunjukkan yang sebaliknya.[[Enumerable]]
salah :-)Minuses of typeof obj.prop == 'undefined'
, ini bisa dihindari dengan menulis sebagaitypeof obj.prop == typeof undefined
. Ini juga memberikan simetri yang sangat bagus.obj.prop === undefined
.if ('foo' in o
) ... jawaban Anda benar-benar adalah jawaban benar pertama di sini. Cukup banyak orang lain hanya menjawab kalimat itu.Masalahnya bermuara pada tiga kasus:
undefined
.undefined
.Ini memberitahu kita sesuatu yang saya anggap penting:
Ada perbedaan antara anggota yang tidak ditentukan dan anggota yang ditentukan dengan nilai yang tidak ditentukan.
Namun sayangnya
typeof obj.foo
tidak memberi tahu kami mana dari tiga kasus yang kami miliki. Namun kita dapat menggabungkan ini dengan"foo" in obj
untuk membedakan kasus.Perlu dicatat bahwa tes ini juga sama untuk
null
entriSaya berpendapat bahwa dalam beberapa kasus lebih masuk akal (dan lebih jelas) untuk memeriksa apakah properti itu ada, daripada memeriksa apakah itu tidak terdefinisi, dan satu-satunya kasus di mana cek ini akan berbeda adalah kasus 2, kasus langka dari entri aktual dalam objek dengan nilai yang tidak ditentukan.
Sebagai contoh: Saya baru saja refactoring sekelompok kode yang memiliki banyak pemeriksaan apakah suatu objek memiliki properti yang diberikan.
Yang lebih jelas ketika ditulis tanpa tanda centang untuk yang tidak ditentukan.
Tetapi seperti yang telah disebutkan ini tidak persis sama (tetapi lebih dari cukup baik untuk kebutuhan saya).
sumber
if (!("x" in blob)) {}
dengan tanda kurung di dalam, karena! Operator lebih diutamakan daripada 'dalam'. Semoga itu bisa membantu seseorang.a = {b: undefined}
;typeof a.b === typeof a.c === 'undefined'
tapi kemudian'b' in a
dan!('c' in a)
.{ x : undefined }
atau setidaknya menambahkannya sebagai alternatif lain (2.) di tabel - saya harus berpikir sejenak untuk menyadari titik itu (2.) mengevaluasi keundefined
(meskipun Anda menyebutkannya nanti).Ini bekerja untuk saya sedangkan yang lain tidak.
sumber
typeof (something == "undefined")
.(typeof something) === "undefined"
.Saya tidak yakin dari mana asal menggunakan
===
dengantypeof
, dan sebagai konvensi saya melihatnya digunakan di banyak perpustakaan, tetapi typeof operator mengembalikan string literal, dan kami tahu itu di muka, jadi mengapa Anda juga ingin mengetik periksa juga?sumber
==
masih membutuhkan setidaknya pemeriksaan tipe - penerjemah tidak dapat membandingkan kedua operan tanpa mengetahui jenis operannya terlebih dahulu.==
adalah satu karakter kurang dari===
:)Crossposting jawaban saya dari pertanyaan terkait Bagaimana cara memeriksa "tidak terdefinisi" dalam JavaScript?
Khusus untuk pertanyaan ini, lihat uji kasus dengan
someObject.<whatever>
.Beberapa skenario yang menggambarkan hasil dari berbagai jawaban: http://jsfiddle.net/drzaus/UVjM4/
(Perhatikan bahwa penggunaan tes
var
untukin
membuat perbedaan ketika di bungkus scoped)Kode untuk referensi:
Dan hasil:
sumber
Jika kamu melakukan
itu akan gagal ketika variabel
myvar
tidak ada, karena myvar tidak didefinisikan, sehingga skrip rusak dan tes tidak berpengaruh.Karena objek jendela memiliki cakupan global (objek default) di luar fungsi, deklarasi akan 'dilampirkan' ke objek jendela.
Sebagai contoh:
Variabel global myvar sama dengan window.myvar atau window ['myvar']
Untuk menghindari kesalahan saat menguji ketika variabel global ada, Anda lebih baik menggunakan:
Pertanyaan jika suatu variabel benar-benar ada tidak masalah, nilainya tidak benar. Kalau tidak, konyol untuk menginisialisasi variabel dengan tidak terdefinisi, dan lebih baik menggunakan nilai false untuk menginisialisasi. Ketika Anda tahu bahwa semua variabel yang Anda nyatakan diinisialisasi dengan false, Anda bisa langsung memeriksa tipenya atau mengandalkan
!window.myvar
untuk memeriksa apakah itu memiliki nilai yang tepat / valid. Jadi bahkan ketika variabel tidak didefinisikan maka!window.myvar
adalah sama untukmyvar = undefined
ataumyvar = false
ataumyvar = 0
.Saat Anda mengharapkan jenis tertentu, uji jenis variabel. Untuk mempercepat pengujian suatu kondisi sebaiknya Anda lakukan:
Ketika kondisi pertama dan sederhana benar, penerjemah melewatkan tes berikutnya.
Itu selalu lebih baik untuk menggunakan instance / objek variabel untuk memeriksa apakah itu mendapat nilai yang valid. Ini lebih stabil dan merupakan cara pemrograman yang lebih baik.
(y)
sumber
Saya tidak melihat (harap saya tidak ketinggalan) ada orang yang memeriksa objek sebelum properti. Jadi, ini adalah yang terpendek dan paling efektif (walaupun tidak harus yang paling jelas):
Jika obj atau obj.prop tidak terdefinisi, null, atau "falsy", pernyataan if tidak akan menjalankan blok kode. Ini biasanya perilaku yang diinginkan di sebagian besar pernyataan blok kode (dalam JavaScript).
sumber
var x = obj && obj.prop || 'default';
Dalam artikel Menjelajahi Jurang Null dan Undefined dalam JavaScript saya membaca bahwa kerangka kerja seperti Underscore.js menggunakan fungsi ini:
sumber
void 0
hanyalah cara singkat untuk menulisundefined
(karena itu adalah kekosongan yang diikuti oleh setiap ekspresi yang dikembalikan), ini menghemat 3 karakter. Bisa jugavar a; return obj === a;
, tapi itu satu karakter lagi. :-)void
adalah kata yang dilindungi undang-undang, padahalundefined
tidak berarti sementaraundefined
sama denganvoid 0
secara default, Anda dapat menetapkan nilai keundefined
misalnyaundefined = 1234
.isUndefined(obj)
: 16 karakter.obj === void 0
: 14 karakter. 'cukup kata.Sederhananya apa pun yang tidak didefinisikan dalam JavaScript, tidak terdefinisi , tidak masalah apakah itu properti di dalam Obyek / Array atau hanya sebagai variabel sederhana ...
JavaScript memiliki
typeof
yang membuatnya sangat mudah untuk mendeteksi variabel yang tidak terdefinisi.Cukup periksa apakah
typeof whatever === 'undefined'
dan itu akan mengembalikan boolean.Begitulah cara fungsi terkenal
isUndefined()
di AngularJs v.1x ditulis:Jadi, ketika Anda melihat fungsi menerima nilai, jika nilai itu didefinisikan, itu akan kembali
false
, jika tidak, untuk nilai yang tidak ditentukan, kembalitrue
.Jadi mari kita lihat apa yang akan menjadi hasil ketika kita melewati nilai, termasuk properti objek seperti di bawah ini, ini adalah daftar variabel yang kita miliki:
dan kami memeriksanya seperti di bawah ini, Anda dapat melihat hasilnya di depan mereka sebagai komentar:
Seperti yang Anda lihat, kami dapat memeriksa apa pun dengan menggunakan sesuatu seperti ini dalam kode kami, seperti yang disebutkan, Anda hanya dapat menggunakan
typeof
dalam kode Anda, tetapi jika Anda menggunakannya berulang-ulang, buat fungsi seperti sampel sudut yang saya bagikan dan tetap gunakan kembali sebagai mengikuti pola kode KERING.Juga satu hal lagi, untuk memeriksa properti pada objek dalam aplikasi nyata yang Anda tidak yakin bahkan objek tersebut ada atau tidak, periksa apakah objek tersebut ada terlebih dahulu.
Jika Anda memeriksa properti pada objek dan objek tidak ada, akan menimbulkan kesalahan dan menghentikan seluruh aplikasi yang berjalan.
Sangat sederhana, Anda dapat membungkus di dalam pernyataan if seperti di bawah ini:
Yang juga sama dengan yang didefinisikan dalam Angular 1.x ...
Juga kerangka kerja javascript lain seperti underscore memiliki pemeriksaan definisi yang serupa, tetapi saya sarankan Anda menggunakan
typeof
jika Anda sudah tidak menggunakan kerangka kerja apa pun.Saya juga menambahkan bagian ini dari MDN yang telah mendapat informasi berguna tentang typeof, undefined dan void (0).
lebih banyak> di sini
sumber
' jika (window.x) {} ' aman dari kesalahan
Kemungkinan besar Anda inginkan
if (window.x)
. Pemeriksaan ini aman walaupun x belum dideklarasikan (var x;
) - browser tidak menampilkan kesalahan.Contoh: Saya ingin tahu apakah browser saya mendukung History API
Bagaimana ini bekerja:
window adalah objek yang menampung semua variabel global sebagai anggotanya, dan adalah sah untuk mencoba mengakses anggota yang tidak ada. Jika x belum dinyatakan atau belum disetel maka
window.x
pengembalian tidak terdefinisi . lead yang tidak terdefinisi ke false ketika if () mengevaluasinya.sumber
typeof history != 'undefined'
sebenarnya bekerja di kedua sistem.Membaca ini, saya kagum saya tidak melihat ini. Saya telah menemukan banyak algoritma yang akan bekerja untuk ini.
Tidak Didefinisikan
Jika nilai suatu objek tidak pernah didefinisikan, ini akan mencegah dari kembali
true
jika itu didefinisikan sebagainull
atauundefined
. Ini berguna jika Anda ingin benar dikembalikan untuk nilai yang ditetapkan sebagaiundefined
Didefinisikan sebagai tidak terdefinisi atau Tidak pernah Didefinisikan
Jika Anda ingin hasilnya
true
untuk nilai-nilai yang didefinisikan dengan nilaiundefined
, atau tidak pernah didefinisikan, Anda dapat menggunakannya=== undefined
Didefinisikan sebagai nilai falsy, undefined, null, atau tidak pernah didefinisikan.
Secara umum, orang-orang telah meminta saya untuk algoritma untuk mencari tahu apakah suatu nilai salah
undefined
,, ataunull
. Pekerjaan berikut.sumber
if (!obj.prop)
var obj = {foo: undefined}; obj.foo === void 0
->true
. Bagaimana itu "tidak pernah didefinisikan sebagaiundefined
"? Ini salah.sumber
Dibandingkan dengan
void 0
, untuk kesederhanaan.Ini tidak selektif
if (typeof foo !== 'undefined')
sumber
foo
tidak dideklarasikan.Solusinya salah. Dalam JavaScript,
akan kembali benar, karena mereka berdua "dicor" ke boolean dan salah. Cara yang benar adalah dengan memeriksa
yang merupakan operator identitas ...
sumber
===
adalah ketik kesetaraan + (persamaan primitif | identitas objek), di mana primitif mencakup string. Saya pikir kebanyakan orang menganggap tidak'abab'.slice(0,2) === 'abab'.slice(2)
intuitif jika seseorang menganggap===
sebagai operator identitas.Anda bisa mendapatkan array yang tidak terdefinisi dengan path menggunakan kode berikut.
tautan jsFiddle
sumber
getUndefiend
seharusnyagetUndefined
.Inilah situasi saya:
Saya menggunakan hasil panggilan REST. Hasilnya harus diuraikan dari JSON ke objek JavaScript.
Ada satu kesalahan yang harus saya pertahankan. Jika args ke panggilan sisanya salah sejauh pengguna menentukan args salah, panggilan sisanya kembali pada dasarnya kosong.
Saat menggunakan pos ini untuk membantu saya bertahan melawan ini, saya mencoba ini.
Untuk situasi saya, jika restResult.data [0] === "objek", maka saya dapat dengan aman mulai memeriksa anggota lainnya. Jika tidak terdefinisi maka lemparkan kesalahan seperti di atas.
Apa yang saya katakan adalah bahwa untuk situasi saya, semua saran di atas dalam posting ini tidak berfungsi. Saya tidak mengatakan saya benar dan semua orang salah. Saya bukan master JavaScript sama sekali, tetapi mudah-mudahan ini akan membantu seseorang.
sumber
typeof
Penjaga Anda sebenarnya tidak berjaga-jaga terhadap apa pun yang tidak bisa dilakukan perbandingan langsung. JikarestResult
tidak terdefinisi atau tidak dideklarasikan, ia masih akan membuang.if(!restResult.data.length) { throw "Some error"; }
Ada cara yang bagus & elegan untuk menetapkan properti yang ditentukan ke variabel baru jika itu didefinisikan atau menetapkan nilai default untuk itu sebagai fallback jika itu tidak ditentukan.
Ini cocok jika Anda memiliki fungsi, yang menerima properti konfigurasi tambahan:
Sekarang sedang mengeksekusi
sumber
Semua jawaban tidak lengkap. Ini adalah cara yang tepat untuk mengetahui bahwa ada properti 'didefinisikan sebagai tidak terdefinisi':
Contoh:
Sayang sekali ini jawaban yang benar dikubur dalam jawaban yang salah> _ <
Jadi, bagi siapa saja yang lewat, aku akan memberimu undefined gratis !!
sumber
Melewati komentar, bagi mereka yang ingin memeriksa keduanya apakah tidak terdefinisi atau nilainya nol:
Jika Anda menggunakan jQuery Library maka
jQuery.isEmptyObject()
cukup untuk kedua kasus,sumber
Jika Anda menggunakan Angular:
Underscore.js:
sumber
1
variabelx
? Apakah saya perlu Garis Bawah atau jQuery? (Sungguh menakjubkan bahwa orang akan menggunakan perpustakaan bahkan untuk operasi paling dasar sepertitypeof
cek)Saya gunakan
if (this.variable)
untuk menguji apakah itu didefinisikan. Sederhanaif (variable)
, disarankan di atas , gagal untuk saya. Ternyata itu hanya berfungsi ketika variabel adalah bidang dari beberapa objek,obj.someField
untuk memeriksa apakah itu didefinisikan dalam kamus. Tapi kita bisa menggunakanthis
atauwindow
sebagai objek kamus karena variabel apa pun adalah bidang di jendela saat ini, seperti yang saya mengerti. Karena itu inilah ujiannyaPertama mendeteksi bahwa variabel
abc
tidak terdefinisi dan didefinisikan setelah inisialisasi.sumber
Saya memberikan tiga cara di sini bagi mereka yang mengharapkan jawaban aneh:
isUndefined1:
Cobalah untuk mendapatkan properti dari nilai input, periksa pesan kesalahan jika ada. Jika nilai input tidak terdefinisi, pesan kesalahan adalah Uncaught TypeError: Tidak dapat membaca properti 'b' dari undefined
isUndefined2:
Konversi nilai input ke string untuk dibandingkan dengan
"undefined"
dan pastikan itu nilai negatif.isUndefined3:
Dalam js, parameter opsional berfungsi saat nilai input tepat
undefined
.sumber
ES2019 memperkenalkan fitur baru - perangkaian opsional yang dapat Anda gunakan untuk menggunakan properti objek hanya ketika objek didefinisikan seperti ini:
Ini akan merujuk ke properti ponsel hanya ketika pengguna dan data kontak didefinisikan.
Ref. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
sumber
Mengembalikan nilai false jika variabel disetel, dan true jika tidak terdefinisi.
Kemudian gunakan:
sumber
typeof
tes dalam suatu fungsi. Luar biasa bahwa 4 orang menaikkan peringkat ini. -1.Saya ingin menunjukkan kepada Anda sesuatu yang saya gunakan untuk melindungi
undefined
variabel:Ini melarang siapa pun untuk mengubah
window.undefined
nilai karena itu menghancurkan kode berdasarkan variabel itu. Jika menggunakan"use strict"
, apa pun yang mencoba mengubah nilainya akan berakhir dengan kesalahan, jika tidak maka akan diabaikan secara diam-diam.sumber
Anda juga dapat menggunakan Proksi, ini akan berfungsi dengan panggilan bersarang, tetapi akan memerlukan satu pemeriksaan tambahan:
jadi kamu akan menggunakannya seperti:
sumber