как обновить определенное значение в объекте javascript? [dубликат]

Трудно объяснить случай словами, позвольте мне привести пример:

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?

58
задан 12 April 2017 в 05:48

6 ответов

просто, как это myObj.name = value;

0
ответ дан 15 August 2018 в 15:54
myObj.name=value

или

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

Оба они взаимозаменяемы.

Edit: Я предполагаю, что вы имели в виду myObj[prop] = value, а не myObj [name] = value , Второй синтаксис отлично работает: http://jsfiddle.net/waitinforatrain/dNjvb/1/

32
ответ дан 15 August 2018 в 15:54
  • 1
    Если свойство объекта является зарезервированным словом, требуется второй синтаксис. – timw4mail 22 June 2011 в 17:38
  • 2
    Хотя это правильно, на самом деле он не отвечает на его вопрос; он задается вопросом, что делать, когда имя свойства находится в переменной. – Ernest Friedman-Hill 22 June 2011 в 17:41
  • 3
    Обновленный ответ там, у вас есть name, где вы должны иметь prop – bcoughlan 22 June 2011 в 17:43

Ваш вопрос ошибочен - это действительно работает, но вы допустили ошибку. Вы писали «myObj[name]», когда я совершенно уверен, что вы хотели написать «myObj[prop]».

0
ответ дан 15 August 2018 в 15:54

Когда вы создаете объект myObj, как у вас, подумайте, что он больше похож на словарь. В этом случае он имеет два ключа: name и age.

Вы можете получить доступ к этим словарям двумя способами:

Подобно массиву (например, myObj[name]), ; или как свойство (например, myObj.name); обратите внимание, что некоторые свойства зарезервированы, поэтому первый метод является предпочтительным.

Вы можете иметь доступ к нему как к собственности без каких-либо проблем. Однако, чтобы получить доступ к нему как к массиву, вам нужно обработать ключ как строку.

myObj["name"]

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

2
ответ дан 15 August 2018 в 15:54
  • 1
    Между myObj[name] и myObj.name все еще существует разница, потому что первая относится к имени переменной, а вторая - к буквенному ключу. – pimvdb 22 June 2011 в 17:52

Вы также можете создать что-то, что было бы похоже на объект value (vo);

SomeModelClassNameVO.js;

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

Чем вы можете это сделать,

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);
2
ответ дан 15 August 2018 в 15:54

Вы можете получить свойство так же, как вы его установили.

foo = {
 bar: "value"
}

Вы устанавливаете значение foo["bar"] = "baz";

Чтобы получить значение foo["bar"]

вернет «baz».

3
ответ дан 15 August 2018 в 15:54

Другие вопросы по тегам:

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