Trudno to wyjaśnić słowami, podam przykład:
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 ;)
Jak ustawić właściwość zmiennej z wartością zmiennej w obiekcie JavaScript?
javascript
object
properties
set
Umut KIRGÖZ
źródło
źródło
myObj[prop] = value;
.eval('myObj.'+name)
nie działa również, ponieważ zmiennaname
nie istnieje.var
klawiatur do deklarowania zmiennych, używać więcej średników, nie używaćeval
i akceptować więcej odpowiedzi. Gotowe.myObj[name]
”, kiedy jestem całkiem pewien, że chciałeś napisać „myObj[prop]
”.Odpowiedzi:
To powinno działać. Pomieszałeś nazwę zmiennej i jej wartość. Ale indeksowanie obiektu z ciągami znaków w celu uzyskania jego właściwości działa dobrze w JavaScript.
źródło
lub
Oba są wymienne.
Edycja: zgaduję, że miałeś na myśli
myObj[prop] = value
, zamiast myObj [nazwa] = wartość. Druga składnia działa dobrze: http://jsfiddle.net/waitinforatrain/dNjvb/1/źródło
name
gdzie powinieneś miećprop
Możesz uzyskać tę właściwość w ten sam sposób, w jaki ją ustawiłeś.
Ty ustawiasz wartość
foo["bar"] = "baz";
Aby uzyskać wartość
foo["bar"]
zwróci "baz".
źródło
Możesz także stworzyć coś, co byłoby podobne do obiektu wartości (vo);
SomeModelClassNameVO.js;
Niż możesz po prostu zrobić;
źródło
Kiedy tworzysz obiekt
myObj
taki, jaki masz, myśl o nim bardziej jak o słowniku. W tym przypadku ma dwa kluczename
, iage
.Dostęp do tych słowników można uzyskać na dwa sposoby:
myObj[name]
); lubmyObj.name
); zwróć uwagę, że niektóre właściwości są zarezerwowane, więc preferowana jest pierwsza metoda.Powinieneś mieć dostęp do niego jako własności bez żadnych problemów. Jednak aby uzyskać do niego dostęp jako tablicę, musisz traktować klucz jak ciąg.
W przeciwnym razie javascript przyjmie, że
name
jest to zmienna, a ponieważ nie utworzyłeś zmiennej o nazwiename
, nie będzie mógł uzyskać dostępu do oczekiwanego klucza.źródło
myObj[name]
amyObj.name
, ponieważ pierwsza odnosi się do nazwy zmiennej, a druga do dosłownego klucza.takie proste
myObj.name = value;
źródło