Невозможно установить свойство addUser неопределенного [дубликата]

У меня была такая же проблема на Ubuntu, и я решил ее распаковать все * .pack-файлы в каталог jdk. например: cd /usr/java/jdk1.7.0_03/jre/lib sudo ../bin/unpack200 rt.pack rt.jar

81
задан zessx 20 December 2013 в 10:29
поделиться

5 ответов

вы никогда не устанавливаете d[a] на любое значение.

Из-за этого d[a] оценивается как undefined, и вы не можете установить свойства на undefined.

Если вы добавили d[a] = {} сразу после d = {}, все должно работать как ожидалось.

В качестве альтернативы вы можете использовать инициализатор объекта:

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

Или вы можете установить все свойства d в экземпляре анонимной функции:

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

Если вы находитесь в среде, поддерживающей функции ES2015, вы можете использовать имена вычисленных свойств :

d = {
  [a]: {
    greetings: b,
    data: c
  }
};
108
ответ дан zzzzBov 15 August 2018 в 15:35
поделиться

Я бы просто сделал простую проверку, чтобы увидеть, существует ли d [a] и если не инициализировать его ...

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
ответ дан iohzrd 15 August 2018 в 15:35
поделиться

Объект, сохраненный в d[a], не настроен ни на что. Таким образом, d[a] оценивается как undefined. Вы не можете назначить свойство undefined :). Вам необходимо назначить объект или массив d[a]:

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

console.debug(d);
5
ответ дан Polaris878 15 August 2018 в 15:35
поделиться
  • 1
    Лучше всего назначить объект: d[a] = {}; - использование массивов с нечисловыми ключами приводит к возникновению проблем по линии. – nnnnnn 20 September 2011 в 04:58

Вы должны установить d[a] либо в ассоциативный массив, либо в объект:

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

Без настройки это происходит:

d[a] == undefined, поэтому вы делаете undefined['greeting']=b;, и по определению undefined не имеет свойств. Таким образом, полученная вами ошибка.

24
ответ дан vol7ron 15 August 2018 в 15:35
поделиться
  • 1
    array или object. JS не имеет ассоциативных массивов, хотя Object может действовать как один для ограниченного использования. – Jeremy J Starcher 18 September 2012 в 19:39
  • 2
    @JeremyJStarcher: абсолютно правильно и важно знать, но на этом уровне мышления JavaScript не имеет массивов; он имеет только объекты – vol7ron 19 September 2012 в 01:29
  • 3
    Не совсем. Существуют аспекты ассоциативных массивов, которые не соответствуют объектам Javacript, которые могут отключать кодеры. (Истинные ассоциированные массивы aren [t ограничены требованием, чтобы клавиши были строками. Наличие унаследованных предопределенных свойств является еще одним существенным отличием.) С другой стороны, массивы Javascript, в то время как объекты, действуют так, как ожидается, что числовой массив будет вести себя. Один из них является аспектом функциональности, а другой - внутренней реализацией. – Jeremy J Starcher 19 September 2012 в 01:35

В javascript почти все объекты, null и undefined являются исключением.

Экземпляры Array - это объект. поэтому вы можете установить свойство массива, по той же причине вы не можете установить свойство неопределенного, потому что его НЕ является объектом

4
ответ дан wukong 15 August 2018 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: