Setelah permintaan AJAX, terkadang aplikasi saya dapat mengembalikan objek kosong, seperti:
var a = {};
Bagaimana saya dapat memeriksa apakah itu masalahnya?
Setelah permintaan AJAX, terkadang aplikasi saya dapat mengembalikan objek kosong, seperti:
var a = {};
Bagaimana saya dapat memeriksa apakah itu masalahnya?
if( Object.entries(a).length > 0){ //do }
Jawaban:
ECMA 5+ :
Perhatikan, bagaimanapun, bahwa ini menciptakan array yang tidak perlu (nilai balik dari
keys
).Pra-ECMA 5:
jQuery :
Lodash :
Garis bawah :
Hoek
ExtJS
AngularJS (versi 1)
Ramda
sumber
Object.keys(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.(new Date()).constructor === Date
:, atau sebaliknya({}).constructor === Object
,.Object.keys()
tidak memeriksa properti yang tidak dapat dihitung, atau simbol. Anda harus menggunakanObject.getOwnPropertyNames()
danObject.getOwnPropertySymbols()
sebagai gantinya. Juga,Object.getPrototypeOf()
adalah cara yang benar untuk mendapatkan prototipe objek.obj.constructor
dapat dengan mudah dipalsukan. Contoh:function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true
.Tidak ada cara mudah untuk melakukan ini. Anda harus mengulang properti secara eksplisit:
Jika dukungan ECMAScript 5 tersedia, Anda dapat menggunakannya
Object.keys()
:sumber
isEmpty()
, jadi ia harus kembalifalse
jika memiliki propertiBagi Anda yang memiliki masalah yang sama tetapi menggunakan jQuery, Anda dapat menggunakan jQuery.isEmptyObject .
sumber
underscore.js
...Ini adalah solusi pilihan saya:
sumber
Object.keys(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.new Date()
bukan obyek.nd = new Date(); nd.constructor === Object;
hasil dalamfalse
.Anda dapat menggunakan Underscore.js .
sumber
lihat http://bencollier.net/2011/04/javascript-is-an-object-empty/
sumber
Object.getOwnPropertyNames(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.Bagaimana dengan menggunakan JSON.stringify? Ini hampir tersedia di semua browser modern.
sumber
Saya hanya mengalami situasi yang sama. Saya tidak ingin menggunakan JQuery, dan ingin melakukan ini menggunakan Javascript murni.
Dan apa yang saya lakukan adalah, menggunakan kondisi berikut, dan itu berhasil untuk saya.
Untuk tidak sama dengan, gunakan ini:
JSON.stringify(obj) !== '{}'
Lihatlah JSFiddle ini
sumber
Pertanyaan lama, tetapi baru saja memiliki masalah. Termasuk JQuery sebenarnya bukan ide yang bagus jika tujuan Anda satu-satunya adalah memeriksa apakah objek tidak kosong. Sebaliknya, cukup jauh ke dalam kode JQuery , dan Anda akan mendapatkan jawabannya:
sumber
Ada cara sederhana jika Anda menggunakan browser yang lebih baru.
Object.keys(obj).length == 0
sumber
keys
properti itu berasal?Object.keys
adalah metode standar tetapi objek tidak memiliki properti kunci. Jadi kode ini akan melaporkan objek apa pun sebagai kosong kecuali secara tidak sengaja memiliki properti bernamakey
dengan nilai yang lagi sebagai properti bernamalength
yang bukan nol. Mengerikan!Object.keys(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.Performa
Hari ini 2020.01.17 Saya melakukan tes pada MacOs HighSierra 10.13.6 di Chrome v79.0, Safari v13.0.4 dan Firefox v72.0, untuk solusi yang dipilih.
Kesimpulan
for-in
(A, J, L, M) adalah yang tercepatJSON.stringify
(B, K) lambatObject
(N) lambatDetail
Dalam cuplikan di bawah ini disajikan 15 solusi. Jika Anda ingin menjalankan tes kinerja pada mesin Anda, klik DI SINI .
Tampilkan cuplikan kode
sumber
Menggunakan Object.keys (obj) .length (seperti yang disarankan di atas untuk ECMA 5+) 10 kali lebih lambat untuk objek kosong! tetap dengan opsi sekolah lama (untuk ... dalam).
Diuji di bawah Node, Chrome, Firefox dan IE 9, menjadi jelas bahwa untuk sebagian besar kasus penggunaan:
Kinerja bottom line, gunakan:
atau
Lihat hasil pengujian terperinci dan kode pengujian di Apakah objek kosong?
sumber
Object.keys
lambat, tetapi kode kurang. Pada halaman kecil, di mana ini disebut ... mungkin 10 kali ... Apakah ini masih lebih lambat mengingat waktu penguraian tambahan kode tambahan?Anda dapat memeriksa jumlah kunci Objek:
sumber
Hanya solusinya. Bisakah server Anda menghasilkan beberapa properti khusus jika tidak ada data?
Sebagai contoh:
Maka Anda dapat dengan mudah memeriksanya dalam kode panggilan balik AJAX Anda.
Cara lain untuk memeriksanya:
EDIT : Jika Anda menggunakan pustaka JSON (fe JSON.js), maka Anda dapat mencoba fungsi JSON.encode () dan menguji hasilnya terhadap string nilai kosong.
sumber
toSource()
tidak standar dan tidak berfungsi di IE atau Opera (dan berpotensi peramban lain yang tidak saya periksa)toSource
properti di bagian 15.2.4; menurut MDC, ini diperkenalkan di JS1.3 (yaitu Netscape Navigator 4.06), tetapi BUKAN dalam ECMA-262, edisi ke-3!toSource()
adalah cara yang mengerikan untuk melakukan ini (sebagaimana adanyaJSON.encode()
). Perlu membuat string yang mewakili seluruh objek Anda hanya untuk memeriksa apakah itu kosong. Ada overhead mengkonversi hal-hal menjadi string, tetapi terlebih lagi itu perlu mengkonversi sejuta hal jika objek Anda memiliki sejuta properti, sementara sebenarnya hanya dengan melihat satu saja akan memberi tahu Anda bahwa itu tidak kosong.Saya telah membuat fungsi lengkap untuk menentukan apakah objek kosong.
Ini menggunakan
Object.keys
dari fungsionalitas ECMAScript 5 (ES5) jika memungkinkan untuk mencapai kinerja terbaik (lihat tabel kompatibilitas ) dan mundur ke pendekatan yang paling kompatibel untuk mesin yang lebih lama (browser).Larutan
Inilah Intisari untuk kode ini.
Dan inilah JSFiddle dengan demonstrasi dan tes sederhana.
Saya harap ini akan membantu seseorang. Bersulang!
sumber
null
objek.Object.keys(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.Saya menggunakan ini.
Misalnya:
dari sini
Memperbarui
ATAU
Anda dapat menggunakan implementasi jQuery dari isEmptyObject
sumber
Contoh berikut menunjukkan cara menguji apakah objek JavaScript kosong, jika dengan kosong kami berarti tidak memiliki properti sendiri.
Script berfungsi pada ES6.
sumber
sumber
Object.keys
atauObject.values
?sumber
Object
dengan metode melalui rantai prototipe, karena itu enumerable danfor in
pernyataan loop melalui properti enumerable.jQuery memiliki fungsi khusus
isEmptyObject()
untuk kasus ini:Baca lebih lanjut di http://api.jquery.com/jQuery.isEmptyObject/
sumber
Saya akan memeriksa apakah memiliki setidaknya satu kunci. Itu sudah cukup untuk memberi tahu saya bahwa itu tidak kosong.
sumber
false
nilai? hasilnya adalahfalse
yang salah.Di bawah tenda semua metode pemeriksaan kosong di semua perpustakaan menggunakan kunci objek memeriksa logika. Ini cara yang aneh untuk membuatnya dimengerti, yang dapat Anda masukkan ke dalam metode, Dijelaskan di sini .
Yang telah berevolusi dalam ES5 , sekarang secara sederhana Anda dapat memeriksa panjang kunci objek, menggunakan
Object.Keys
metode yang mengambil objek Anda sebagai parameternya:Atau jika Anda menggunakan Lodash (Anda harus) maka.
sumber
Anda dapat menggunakan kode sederhana ini yang tidak menggunakan jQuery atau perpustakaan lain
Kelas JSON dan fungsinya ( parse dan stringify ) sangat berguna tetapi memiliki beberapa masalah dengan IE7 yang dapat Anda perbaiki dengan kode sederhana ini http://www.json.org/js.html .
Other Simple Way (Cara paling sederhana):
Anda bisa menggunakan cara ini tanpa menggunakan objek jQuery atau JSON .
sumber
JSON.stringify
solusi gagal jika objek berisi properti yang tidak dapat di-stringifikasi seperti fungsi atau "tidak terdefinisi", meskipun diberikan bahwa itu adalah kasus tepi.Cara terbaik yang saya temukan:
Bekerja untuk:
sumber
if (!obj && obj !== 0)
.Saya ambil:
Hanya, saya tidak berpikir semua browser menerapkan
Object.keys()
saat ini.sumber
Object.keys(new Date()).length === 0
; jadi jawaban ini bisa menyesatkan.Jika jQuery dan browser web tidak tersedia, ada juga fungsi isEmpty di underscore.js.
Selain itu, ia tidak menganggap parameter input sebagai objek. Untuk daftar atau string atau tidak terdefinisi, itu juga akan mengubah jawaban yang benar.
sumber
Peringatan! Waspadai batasan JSON.
menampilkan
sumber
Jawaban yang benar adalah:
Ini memeriksa bahwa:
Object.prototype
.Dengan kata lain, objek tidak dapat dibedakan dari objek yang dibuat
{}
.sumber
Selain jawaban Thevs:
itu jquery + jquery.json
sumber
$.isEmptyObject()
, jangan buang siklus dengan konversi yang tidak jelas.Sugar.JS menyediakan objek yang diperluas untuk tujuan ini. Kode ini bersih dan sederhana:
Buat objek yang diperluas:
Periksa ukurannya:
sumber