У меня была такая же проблема на Ubuntu, и я решил ее распаковать все * .pack-файлы в каталог jdk. например: cd /usr/java/jdk1.7.0_03/jre/lib sudo ../bin/unpack200 rt.pack rt.jar
вы никогда не устанавливаете 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
}
};
Я бы просто сделал простую проверку, чтобы увидеть, существует ли 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);
Объект, сохраненный в d[a]
, не настроен ни на что. Таким образом, d[a]
оценивается как undefined
. Вы не можете назначить свойство undefined
:). Вам необходимо назначить объект или массив d[a]
:
d[a] = [];
d[a]["greeting"] = b;
console.debug(d);
d[a] = {};
- использование массивов с нечисловыми ключами приводит к возникновению проблем по линии.
– nnnnnn
20 September 2011 в 04:58
Вы должны установить d[a]
либо в ассоциативный массив, либо в объект:
d[a] = [];
d[a] = {};
Без настройки это происходит:
d[a] == undefined
, поэтому вы делаете undefined['greeting']=b;
, и по определению undefined не имеет свойств. Таким образом, полученная вами ошибка.
array
или object
. JS не имеет ассоциативных массивов, хотя Object
может действовать как один для ограниченного использования.
– Jeremy J Starcher
18 September 2012 в 19:39
В javascript почти все объекты, null
и undefined
являются исключением.
Экземпляры Array
- это объект. поэтому вы можете установить свойство массива, по той же причине вы не можете установить свойство неопределенного, потому что его НЕ является объектом