Як динамічно встановити значення об'єкта Javascript?


98

Складно пояснити випадок словами, дозвольте навести приклад:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

Як я можу встановити властивість змінної зі змінним значенням в об’єкті JavaScript?



2
Придивіться уважно. Здається, ви просто забули коригувати код корту. Це повинно бути myObj[prop] = value;. eval('myObj.'+name)не працює, оскільки змінна nameне існує.
Фелікс Клінг

7
ви дійсно повинні використовувати більше varклавіатур для декларування змінних, використовувати більше крапки з комою, не використовувати evalта приймати більше відповідей. Зроблено.
jAndy

Ваше запитання є помилковим - це працює, але ви помилилися. Ви написали " myObj[name]", коли я абсолютно впевнений, що ви мали намір написати " myObj[prop]".
Ернест Фрідман-Хілл

Відповіді:


151
myObj[prop] = value;

Це має спрацювати. Ви змішали ім'я змінної та її значення. Але індексація об'єкта рядками для отримання його властивостей працює в JavaScript.


47
myObj.name=value

або

myObj['name']=value     (Quotes are required)

Обидва вони взаємозамінні.

Редагувати: я здогадуюсь, що ви мали на увазі myObj[prop] = valueзамість myObj [name] = значення. Другий синтаксис працює чудово: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Якщо властивість об'єкта є зарезервованим словом, потрібен другий синтаксис.
timw4mail

Хоча це правильно, він насправді не відповідає на його запитання; йому цікаво, що робити, коли ім'я властивості знаходиться в змінній.
Ернест Фрідман-Хілл

Оновлена ​​відповідь там, у вас є, nameде вам слід булоprop
bcoughlan

5

Ви можете отримати майно так само, як ви його встановили.

foo = {
 bar: "value"
}

Ви встановлюєте значення foo["bar"] = "baz";

Щоб отримати значення foo["bar"]

поверне "baz".


5

Ви також можете створити щось, схоже на об'єкт значення (vo);

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

Чим ти можеш просто зробити;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

Коли ви створюєте об'єкт так, myObjяк у вас є, думайте про це більше як словник. У цьому випадку він має дві клавіші name, і age.

Ви можете отримати доступ до цих словників двома способами:

  • Як масив (наприклад myObj[name]); або
  • Як власність (наприклад myObj.name); зауважте, що деякі властивості зарезервовані, тому перший спосіб є кращим.

Ви маєте змогу без проблем отримати доступ до нього як власність. Однак, щоб отримати доступ до нього як до масиву, вам доведеться ставитися до ключа, як до рядка.

myObj["name"]

В іншому випадку javascript буде вважати, що nameце змінна, і оскільки ви не створили змінну під назвою name, вона не зможе отримати доступ до ключа, який ви очікуєте.


1
Існує ще різниця між тим myObj[name]і тим myObj.name, тому що перший посилається на ім'я змінної, а другий на буквальний ключ.
pimvdb

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.