Kode saya:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
Saya mendapatkan kesalahan berikut:
TypeError Tak Tertangkap: Tak dapat menyetel properti 'salam' dari tak terdefinisi.
Saya mencoba melakukan sesuatu yang mirip dengan array asosiatif. Mengapa ini tidak berhasil?
javascript
StackOverflowNewbie
sumber
sumber
Jawaban:
Anda tidak pernah menetapkan
d[a]
nilai apa pun.Karenanya,
d[a]
evaluasi keundefined
, dan Anda tidak dapat mengaktifkan propertiundefined
.Jika Anda menambahkan
d[a] = {}
tepat setelahd = {}
hal-hal harus berfungsi seperti yang diharapkan.Alternatifnya, Anda bisa menggunakan penginisialisasi objek:
Atau Anda dapat mengatur semua properti
d
dalam contoh fungsi anonim:Jika Anda berada di lingkungan yang mendukung fitur ES2015, Anda bisa menggunakan nama properti yang dihitung :
sumber
Anda harus menyetel
d[a]
ke array asosiatif, atau objek:d[a] = [];
d[a] = {};
Tanpa pengaturan, inilah yang terjadi:
d[a] == undefined
, jadi yang Anda lakukanundefined['greeting']=b;
dan menurut definisi, undefined tidak memiliki properti. Jadi, kesalahan yang Anda terima.sumber
array
atauobject
. JS tidak memiliki array asosiatif, meskipunObject
dapat bertindak seperti array untuk penggunaan terbatas.Objek yang disimpan di
d[a]
belum disetel ke apa pun. Jadi,d[a]
evaluasi keundefined
. Anda tidak dapat menetapkan properti keundefined
:). Anda perlu menetapkan objek atau larik ked[a]
:sumber
d[a] = {};
- menggunakan array dengan kunci non-numerik cenderung menyebabkan masalah di kemudian hari.Dalam javascript hampir semuanya adalah objek,
null
danundefined
ada pengecualian.Contoh dari
Array
adalah sebuah objek. sehingga Anda dapat mengatur properti dari sebuah array, untuk alasan yang sama, Anda tidak dapat mengatur properti dari yang tidak ditentukan, karena BUKAN sebuah objeksumber
saya hanya akan melakukan pemeriksaan sederhana untuk melihat apakah d [a] ada dan jika tidak menginisialisasinya ...
sumber