Soru JavaScript - undefined özelliğini ayarlayamıyor


Kodum:

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

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

        console.debug (d);

Aşağıdaki hatayı alıyorum:

Yakalanmamış TypeError: undefined özelliği 'tebrik' ayarlanamaz.

İlişkilendirici bir diziye benzer bir şey yapmaya çalışıyorum. Neden bu çalışmıyor?


76
2017-09-20 02:44


Menşei


d [a] tanımsızdır. Özünde d ["1"] undefined - Joseph Marikle


Cevaplar:


asla ayarlamadın d[a] herhangi bir değere.

Bu nedenle, d[a] değerlendirir undefinedve üzerinde özellikleri ayarlayamazsınız undefined.

Eklerseniz d[a] = {} hemen sonra d = {} işler beklendiği gibi çalışmalı.

Alternatif olarak, bir nesne başlatıcısı kullanabilirsiniz:

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

Ya da tüm özelliklerini d anonim bir işlev örneğinde:

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

ES2015 özelliklerini destekleyen bir ortamda iseniz, kullanabilirsiniz hesaplanan özellik adları:

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

108
2017-09-20 02:45



Bu işe yarıyor. desen şöyle olmalıdır: d = {[a]: {selamlama: b, veri: c}} - robskrob
@robertjewell, iyi nokta, ES2015 notasyonu hakkında not eklemek için güncelledik. - zzzzBov


Ayarlamak zorundasın d[a] ilişkilendirici bir diziye veya bir nesneye:

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

Ayarlamadan, olan şey şu:

d[a] == undefined, yani yapıyorsun undefined['greeting']=b; ve tanım gereği, tanımsız özellik yoktur. Böylece, aldığınız hata.


24
2017-09-20 02:51



array veya object. Ancak JS ilişkilendirici dizileri içermiyor Object sınırlı kullanımlar için biri gibi davranabilir. - Jeremy J Starcher
@JeremyJStarcher: kesinlikle doğru ve bilmek önemlidir, ancak bu düşünce seviyesinde, JavaScript dizisi yoktur; sadece nesneleri var - vol7ron
Tam olarak değil. Kodlayıcıları harekete geçiren Javacript nesneleriyle ilgili doğru olmayan ilişkilendirici dizilerin yönleri vardır. (Doğru ilişkilendirilmiş diziler, anahtarların dizge olmasını gerektirmeyerek sınırlandırılmıştır. Devralınan önceden tanımlanmış özelliklerin varlığı bir başka önemli farktır.) Öte yandan, Javascript dizileri, nesneler gibi davranarak, sayısal bir dizinin davranmasını bekler. Biri işlevselliğin bir yönüdür, diğeri ise iç uygulamadır. - Jeremy J Starcher


Depolanan nesne d[a] hiçbir şeye ayarlanmamış. Böylece, d[a] değerlendirir undefined. Bir mülk atayamazsınız undefined :). Bir nesne veya dizi atamanız gerekiyor d[a]:

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

console.debug(d);

5
2017-09-20 02:47



Bir nesneyi atamak en iyisi: d[a] = {}; - sayısal olmayan tuşlara sahip dizileri kullanmak, hattın aşağısında sorunlara yol açar. - nnnnnn


Javascript'te neredeyse her şey bir nesnedir. null ve undefined istisna vardır.

Örnekleri Array bir nesnedir. böylece bir dizinin özelliğini ayarlayabilirsiniz, aynı nedenden dolayı, tanımsız bir özelliğin değerini ayarlayamazsınız, çünkü DEĞİL bir obje


4
2017-09-20 03:40





d [a] 'nın var olup olmadığını görmek için basit bir kontrol yapardım ve eğer başlatılamıyorsa ...

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