Dengan asumsi saya menyatakan
var ad = {};
Bagaimana saya dapat memeriksa apakah objek ini akan berisi properti yang ditentukan pengguna?
javascript
Ricky
sumber
sumber
Object.keys
akan menjadi yang termudah:var a = [1,2,3];a.something=4;console.log(Object.keys(a))
Karena ini sudah menjadi bagian dari ECMA 5 Anda dapat dengan aman shim itu: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})
.Anda dapat menggunakan
Object.keys
metode bawaan untuk mendapatkan daftar kunci pada suatu objek dan menguji panjangnya.sumber
var str = "MyString"; Object.keys(str);
, konsol mengeluarkan 8 tombol, dari 0 hingga 7, untuk setiap karakter. Atau apakah saya masih belum mengerti jawabannya.Bagaimana dengan membuat fungsi sederhana?
The
hasOwnProperty
pemanggilan metode langsung padaObject.prototype
hanya menambah sedikit lebih aman , bayangkan berikut menggunakan normalobj.hasOwnProperty(...)
panggilan:Catatan: (untuk masa depan) Metode di atas bergantung pada
for...in
pernyataan, dan pernyataan ini hanya mengulangi properti enumerable , dalam ECMAScript Standard yang saat ini paling banyak diterapkan (edisi ke-3) programmer tidak memiliki cara untuk membuat properti yang tidak dapat dihitung .Namun ini telah berubah sekarang dengan ECMAScript Edisi ke-5 , dan kami dapat membuat properti yang tidak dapat dihitung, tidak dapat ditulis atau tidak dapat dihapus, sehingga metode di atas dapat gagal , misalnya:
Solusi ECMAScript 5 untuk masalah ini adalah:
The
Object.getOwnPropertyNames
kembali metode yangArray
berisi nama-nama semua yang sifat sendiri suatu objek, enumerable atau tidak , metode ini sedang dilaksanakan sekarang dengan vendor browser, itu sudah pada 5 Beta Chrome dan terbaru WebKit Nightly Builds.Object.defineProperty
juga tersedia di browser tersebut dan rilis Firefox 3.7 Alpha terbaru.sumber
hasOwnProperty
properti, fungsinya mungkin macet ... Saya tahu saya sedikit paranoid ... tapi kadang-kadang Anda tidak tahu di lingkungan seperti apa kode Anda akan digunakan, tetapi Anda tahu metode apa yang ingin Anda gunakan ...Object.prototype
, itu tidak akan disebutkan olehfor...in
. JadiisEmptyObject({toString:1})
akan gagal. Ini adalah salah satu alasan disayangkan Anda tidak dapat cukup menggunakanObject
sebagai pemetaan tujuan umum.Dengan jQuery Anda dapat menggunakan:
Pada jQuery 1.4 metode ini memeriksa kedua properti pada objek itu sendiri dan properti yang diwarisi dari prototipe (dalam hal itu tidak menggunakan hasOwnProperty).
Dengan ECMAScript 5th Edition di browser modern (IE9 +, FF4 +, Chrome5 +, Opera12 +, Safari5 +) Anda dapat menggunakan metode Object.keys bawaan :
Atau JavaScript lama yang sederhana:
sumber
Browser terbaru (dan node.js) mendukung Object.keys () yang mengembalikan array dengan semua kunci dalam objek literal Anda sehingga Anda bisa melakukan hal berikut:
Dukungan Browser: Firefox 4, Chrome 5, Internet Explorer 9, Opera 12, Safari 5
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
sumber
Jika Anda menggunakan underscore.js maka Anda dapat menggunakan fungsi _.isEmpty :
sumber
_.isEmpty([]) // true
Pastikan untuk memeriksa dulu: stackoverflow.com/a/22482737/1922747Jika Anda bersedia menggunakan lodash , Anda dapat menggunakan
some
metode ini.Lihat contoh jsbin kecil ini
sumber
_.some([1, 2]) // true
Pastikan untuk memeriksa dulu: stackoverflow.com/a/13356338/1922747Jika Anda harus aman dan memeriksa prototipe Obyek (ini ditambahkan oleh perpustakaan tertentu dan tidak ada di sana secara default):
sumber
Anggota berarti properti Anggota, variabel anggota, apa pun yang Anda ingin menyebutnya> _>
Kode di atas akan mengembalikan SEMUA, termasuk toString ... Jika Anda hanya ingin melihat apakah prototipe objek telah diperpanjang:
Catatan A: Kami memeriksa untuk melihat apakah anggota objek dummy memiliki tipe yang sama dengan anggota objek pengujian kami. Jika ekstensi, tipe anggota dummyobject harus "tidak ditentukan"
sumber
Sederhana, berfungsi di setiap peramban, dan meskipun secara teknis perulangan untuk semua tombol pada objek, BUKAN perulangan di antara mereka semua ... baik ada 0 dan perulangan tidak berjalan atau ada beberapa dan rusak setelah yang pertama satu (karena semua yang kami periksa adalah jika ada APAPUN ... jadi mengapa lanjut?)
sumber
Jawabannya sangat terlambat, tetapi ini adalah bagaimana Anda bisa mengatasinya dengan prototipe.
sumber
Ketika yakin bahwa objek tersebut adalah objek yang ditentukan pengguna, cara termudah untuk menentukan apakah UDO kosong, akan menjadi kode berikut:
Meskipun metode ini (secara alami) adalah metode deduktif, - ini adalah yang tercepat dan tercepat.
ps:! jangan menggunakannya pada objek yang ditentukan browser.
sumber
Jawaban terlambat, tetapi beberapa kerangka kerja menangani objek sebagai enumerables. Karena itu, bob.js dapat melakukannya seperti ini:
sumber
Anda dapat menggunakan yang berikut ini:
Bang ganda !! pencarian properti
hasOwnProperty Ini adalah sesuatu yang biasa saya gunakan:
Namun, JavaScript memutuskan untuk tidak melindungi nama metode, sehingga bisa dirusak.
menopang di myObject
jenis
Namun, itu tidak memeriksa null.
Saya pikir ini adalah cara terbaik.
di operator
hasil:
Berikut ini adalah tautan yang menjelaskan lebih rinci tentang operator in: Menentukan apakah properti objek ada
sumber
Fungsi ES6
Contoh:
sumber
Bagaimana dengan ini?
sumber