Pertanyaan JavaScript - tidak dapat mengatur properti tidak terdefinisi


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:

Uncaught TypeError: Tidak dapat mengatur 'sapaan' properti tidak terdefinisi.

Saya mencoba melakukan sesuatu yang mirip dengan array asosiatif. Kenapa ini tidak berfungsi?


76
2017-09-20 02:44


asal


Jawaban:


Anda tidak pernah mengatur d[a] untuk nilai apa pun.

Karena ini, d[a] mengevaluasi ke undefined, dan Anda tidak dapat mengatur properti undefined.

Jika Anda menambahkan d[a] = {} tepat setelah d = {} hal-hal harus berfungsi seperti yang diharapkan.

Atau, Anda bisa menggunakan penginisialisasi objek:

d[a] = {
    greetings: b,
    data: c
};

Atau Anda bisa mengatur semua properti d dalam instance fungsi anonim:

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};

Jika Anda berada di lingkungan yang mendukung fitur ES2015, Anda dapat menggunakannya nama properti yang dihitung:

d = {
  [a]: {
    greetings: b,
    data: c
  }
};

108
2017-09-20 02:45



Anda harus mengatur d[a] ke array asosiatif, atau objek:

  • d[a] = [];
  • d[a] = {};

Tanpa pengaturan, inilah yang terjadi:

d[a] == undefined, jadi Anda lakukan undefined['greeting']=b; dan menurut definisi, tidak terdefinisi tidak memiliki properti. Dengan demikian, kesalahan yang Anda terima.


24
2017-09-20 02:51



Objek yang disimpan di d[a] belum diatur untuk apa pun. Demikian, d[a] mengevaluasi ke undefined. Anda tidak dapat menetapkan properti undefined :). Anda harus menetapkan objek atau larik ke d[a]:

d[a] = [];
d[a]["greeting"] = b;

console.debug(d);

5
2017-09-20 02:47



Dalam javascript hampir semuanya merupakan objek, null dan undefined adalah pengecualian.

Contoh dari Array adalah sebuah objek. sehingga Anda dapat menyetel properti larik, karena alasan yang sama, Anda tidak dapat mengatur properti yang tidak ditentukan, karena TIDAK Sebuah Objek


4
2017-09-20 03:40



Saya hanya akan melakukan pemeriksaan sederhana untuk melihat apakah d [a] ada dan jika tidak menginisialisasi ...

var a = "1",
    b = "hello",
    c = { "100" : "some important data" },
    d = {};

    if (d[a] === undefined) {
        d[a] = {}
    };
    d[a]["greeting"] = b;
    d[a]["data"] = c;

    console.debug (d);

0
2018-03-31 21:19