Bagaimana cara menentukan apakah variabelnya undefined
atau null
?
Kode saya adalah sebagai berikut:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
Tetapi jika saya melakukan ini, penerjemah JavaScript menghentikan eksekusi.
Jawaban:
Anda dapat menggunakan kualitas dari operator kesetaraan abstrak untuk melakukan ini:
Karena
null == undefined
itu benar, kode di atas akan menangkap keduanyanull
danundefined
.sumber
const y = undefined; y == null;
Seharusnya kembalitrue
y
konstan, tetapi Anda ware membandingkanabc
(tidaky
). Ketika saya ujiy
melaluiconsole.log(y == null);
di Chrome dan Firefox saya mendapattrue
hasilnya. Jika Anda mendapat kesalahan maka mungkin Anda mencoba menggunakan operator penugasan=
alih-alih perbandingan==
yang masuk akal untuk mengembalikan kesalahan karenaconst
tidak dapat dipindahkan.null
atauundefined
lulus jika variabelnya sama0
? Pertanyaannya bukan tentang pengujian untuk nilai kebenaran, melainkan pengujian secara eksplisit untuknull
atauundefined
.Cara standar untuk menangkap
null
danundefined
secara bersamaan adalah ini:--yang 100% setara dengan yang lebih eksplisit tetapi kurang ringkas:
Saat menulis JS profesional, anggaplah jenis kesetaraan dan perilaku
==
vs===
dipahami. Karena itu kami menggunakan==
dan hanya membandingkannull
.Edit lagi
Komentar yang menyarankan penggunaan
typeof
hanya salah. Ya, solusi saya di atas akan menyebabkan ReferenceError jika variabel tidak ada. Ini hal yang baik. ReferenceError ini diinginkan: ini akan membantu Anda menemukan kesalahan Anda dan memperbaikinya sebelum Anda mengirimkan kode Anda, seperti halnya kesalahan kompiler dalam bahasa lain. Gunakantry
/catch
jika Anda bekerja dengan input, Anda tidak memiliki kendali atas.Anda tidak boleh memiliki referensi ke variabel yang tidak dideklarasikan dalam kode Anda.
sumber
!==
bukan!=
.undefined
, seperti variabel apa pun yang dideklarasikan tetapi tidak diinisialisasi, yaitu,var someVar;
sehingga argumen Anda tidak benar-benar tahanMenggabungkan jawaban di atas, tampaknya jawaban yang paling lengkap adalah:
Ini harus berfungsi untuk variabel apa pun yang tidak dideklarasikan atau dideklarasikan dan secara eksplisit diatur ke nol atau tidak terdefinisi. Ekspresi boolean harus dievaluasi menjadi false untuk setiap variabel yang dideklarasikan yang memiliki nilai bukan nol yang sebenarnya.
sumber
typeof
adalah operator, bukan fungsi, jadi tidak perlu tanda kurung, tapi saya tetap menghargai tanda kurung - hanya untuk membaca kejelasan.variable == null
sumber
undefined
mengevaluasi sama dengannull
./*jshint eqnull:true */
ke bagian atas dokumen atau fungsi JS Anda, dan JSHint akan berhenti memperingatkan Anda tentang penggunaan Anda atas== null
.==
itu rusak. Pemaksaanif(variable == null)
dalam jawaban ini sangat masuk akal bagi saya ...akan bernilai true jika nilainya tidak:
batal
tidak terdefinisi
NaN
string kosong ("")
0
Salah
sumber
if (EmpName)
. Jika sudahundefined
akan palsu.var EmpName; if (EmpName)
. Di mana variabel didefinisikan tetapi tidak diberi nilai.attr()
Fungsi jQuery mengembalikan string kosong atau nilai aktual (dan tidak pernahnull
atauundefined
). Satu-satunya waktu ia kembaliundefined
adalah ketika pemilih Anda tidak mengembalikan elemen apa pun.Jadi, Anda mungkin ingin menguji terhadap string kosong. Atau, karena string kosong, null dan undefined adalah false-y, Anda bisa melakukan ini:
sumber
ReferenceError: EmpName is not defined
undefined
jika atribut tidak ada pada elemen (tidak hanya jika pemilih tidak memiliki elemen yang cocok, sesuai jawabannya). Sebagai contoh, sebuahimg
tanpasrc
akan kembaliundefined
untuk$('img').attr('src');
Saya datang untuk menulis fungsi saya sendiri untuk ini. JavaScript itu aneh.
Dapat digunakan pada apa pun secara harfiah. (Perhatikan bahwa ini juga memeriksa apakah variabel berisi nilai yang dapat digunakan . Tetapi karena informasi ini biasanya juga diperlukan, saya pikir ini layak untuk dikirim). Silakan pertimbangkan untuk meninggalkan catatan.
Kompatibel dengan TypeScript.
Fungsi ini harus melakukan hal yang persis sama seperti
empty()
fungsi PHP (lihatRETURN VALUES
)Menganggap
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
sebagai kosong."0.0"
,NaN
," "
,true
Dianggap non-kosong.sumber
{ }
. Ini adalah masalah bahasa yang umum dan konyol, tetapi saya telah melupakannya. Semua pencarian saya menunjukkan jawaban untuk nilai nol yang tidak terdefinisi, atau perbandingan kesetaraan longgar (==), tetapi tidak kesetaraan ketat (===) atau setara. Dan di sini, di jawaban peringkat -1 Anda di bagian paling bawah halaman (sebelum saya tervvotasikan) adalah jawaban yang luput dari saya.Object.keys( obj ).length < 1
atau mungkin === 0, dengan asumsi itu tidak akan pernah menjadi -1. Bagaimanapun, tervvotasikan ke 0, woo. : p==
menjadi di===
sini, maka ini akan menjadi fungsi yang masuk akal.Jika variabel yang ingin Anda periksa adalah global, lakukan
Cara memeriksa ini tidak akan menimbulkan kesalahan bahkan jika
yourVarName
variabel tidak ada.Contoh: Saya ingin tahu apakah browser saya mendukung History API
Bagaimana ini bekerja:
window
adalah objek yang memegang semua variabel global sebagai propertinya, dan dalam JavaScript adalah sah untuk mencoba mengakses properti objek yang tidak ada. Jikahistory
tidak ada makawindow.history
kembaliundefined
.undefined
adalah falsey, jadi kode dalamif(undefined){}
blok tidak akan berjalan.sumber
null
atauundefined
, juga tidak akan berfungsi jika JavaScript Anda berjalan di luar browser (yaitu di Node.js). Ini juga akan memperlakukan global diatur ke0
,false
atau''
sama dengan yang tidak dideklarasikan atauundefined
ataunull
, yang biasanya baik-baik saja.Yang terpendek dan termudah:
ini akan mengevaluasi true jika EmpName adalah:
sumber
Mungkin cara terpendek untuk melakukan ini adalah:
Ini buktinya:
Tampilkan cuplikan kode
Dan di sini adalah rincian lebih lanjut tentang
==
(sumber di sini )BONUS : alasan mengapa
===
lebih jelas daripada==
(lihat jawaban AGC )sumber
Saya baru saja mengalami masalah ini yaitu memeriksa apakah suatu objek adalah nol.
Saya hanya menggunakan ini:
Sebagai contoh:
sumber
Karena Anda menggunakan jQuery , Anda dapat menentukan apakah suatu variabel tidak terdefinisi atau nilainya nol dengan menggunakan fungsi tunggal.
sumber
ReferenceError: s is not defined
untuk contoh pertama.Elemen cek jQuery bukan null:
sumber
Dalam JavaScript, sesuai pengetahuan saya, kami dapat memeriksa variabel yang tidak terdefinisi, nol, atau kosong seperti di bawah ini.
Periksa semua kondisi:
sumber
var
adalah kata yang dilindungi undang-undang, ini akan melemparSyntaxError
Anda cukup menggunakan yang berikut ini (saya tahu ada cara yang lebih pendek untuk melakukan ini, tetapi ini dapat membuatnya lebih mudah untuk diamati secara visual, setidaknya untuk orang lain yang melihat kode).
sumber
Cara termudah untuk memeriksa adalah:
sumber
false
, yang berpotensi tidak diinginkan.undefined
,,null
dan beberapa hal lain seperti string kosong, +0, -0NaN
danfalse
lewati.!
operator memaksa operan di sinivariable
- ke Boolean: ecma-international.org/ecma-262/#sec-tobooleanDengan solusi di bawah ini:
Saya dapat memeriksa hal-hal berikut:
sumber
Untuk menguji apakah suatu variabel nol atau tidak terdefinisi, saya menggunakan kode di bawah ini.
sumber
typeof
dan bandingkan denganundefined
lurus, bukan sebagai string. Ini berfungsi tetapi operator tambahan tidak memiliki efek selain menjadikannya lebih wordier.Saya menjalankan tes ini di konsol Chrome. Menggunakan (void 0) Anda dapat memeriksa undefined:
sumber
Mari kita lihat ini,
Di atas, variabel hanya dinyatakan sebagai
apple
. Dalam hal ini, jika kita memanggil metode,alert
itu akan menampilkan tidak terdefinisi.Dalam yang kedua ini menampilkan nol, karena variabel
apple
nilai adalah nol.Jadi, Anda dapat memeriksa apakah suatu nilai tidak terdefinisi atau nol.
sumber
Cara terbaik:
sumber
Karena === memeriksa untuk jenis dan nilai. Jenis keduanya berbeda tetapi nilainya sama.
sumber
sumber
typeof
tidak akan pernah menghasilkanundefined
, hanya string'undefined'
. Selain itu,i == null
sudah benar jikai
iniundefined
, sehingga boolean kedua akan berlebihan bahkan jika itu bekerja.The
foo == null
cek harus melakukan trik dan menyelesaikan "tidak terdefinisi OR null" kasus dengan cara yang terpendek. (Tidak mempertimbangkan "foo tidak dideklarasikan" kasus.) Tetapi orang-orang yang terbiasa memiliki 3 sama (sebagai praktik terbaik) mungkin tidak menerimanya. Lihat saja aturan eqeqeq atau triple-equals di eslint dan tslint ...Pendekatan eksplisit, ketika kami memeriksa apakah suatu variabel adalah
undefined
ataunull
secara terpisah, harus diterapkan dalam kasus ini, dan kontribusi saya pada topik (27 jawaban non-negatif untuk saat ini!) Adalah digunakanvoid 0
sebagai cara pendek dan aman untuk melakukan pemeriksaan. untukundefined
.Penggunaan
foo === undefined
tidak aman karena undefined bukan kata yang dilindungi undang-undang dan dapat dibayangi ( MDN ). Menggunakantypeof === 'undefined'
cek itu aman, tetapi jika kita tidak akan peduli dengan kasus foo-is-tidak diumumkan pendekatan berikut dapat digunakan:sumber
jika Anda membuat fungsi untuk memeriksanya:
sumber
Memanggil typeof null mengembalikan nilai "objek", karena nilai khusus null dianggap sebagai referensi objek kosong. Safari melalui versi 5 dan Chrome melalui versi 7 memiliki kekhasan di mana memanggil typeof pada ekspresi reguler mengembalikan "fungsi" sementara semua browser lain mengembalikan "objek".
sumber
Anda hanya dapat menggunakan yang kedua: karena akan memeriksa definisi dan deklarasi
sumber
Saya masih berpikir cara terbaik / aman untuk menguji dua kondisi ini adalah dengan memberikan nilai ke string:
sumber
Anda dapat memeriksa apakah nilainya tidak terdefinisi atau nol dengan hanya menggunakan typeof:
sumber
null
. Saya tidak mengerti mengapa jawaban baru dan salah diberikan pada pertanyaan yang diberikan jawaban yang benar dan lengkap bertahun-tahun yang lalu. Apakah Anda merasa jawaban saat ini entah bagaimana tidak cukup?if(x==null)
adalah ide yang buruk dalam JavaScript. Menilai dengan"=="
- itu dapat menyebabkan paksaan tipe yang tidak terduga, dan itu tidak dapat dibaca oleh CoffeeScript, tidak pernah menggunakan "==" atau "! =" Dalam penilaian kondisi!if(x)
akan lebih baik, tapi hati-hati dengan 0 dan "" . Itu akan diperlakukan sebagai salah , bukan metode yang sama dengan"!= null"
itu benar .Lihat JavaScript Praktik Terbaik .
sumber
==
untuk membandingkan untuknull
adalah dengan cara standar penangkapannull
danundefined
di JS. Jenis paksaan dengan==
bukan risiko dalam konteks khusus ini, dan pada kenyataannya dimanfaatkan untuk mencapai tujuan menangkap keduanyanull
danundefined
secara bersamaan. Silakan menghabiskan lebih banyak waktu bekerja dengan bahasa sebelum memilih untuk menawarkan jawaban yang salah dan menyesatkan untuk pertanyaan yang diselesaikan dengan baik tahun lalu.