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
자세히 살펴보십시오. cour 코드를 조정하는 것을 잊은 것 같습니다. 이어야합니다 myObj[prop] = value;. eval('myObj.'+name)변수 name가 존재하지 않기 때문에 작동하지 않습니다.
Felix Kling 2011-06-22

7
var변수를 선언 하기 위해 더 많은 키보드를 사용 eval하고 더 많은 답변을 사용하지 말고 더 많은 세미콜론을 사용해야 합니다. 끝난.
jAndy 2011-06-22

귀하의 질문에 결함 이 있습니다. 작동하지만 실수를했습니다. " myObj[name]"를 쓰려고하신다고 확신 할 때 " "을 썼습니다 myObj[prop].
Ernest Friedman-Hill

답변:


151
myObj[prop] = value;

작동합니다. 변수의 이름과 값을 섞었습니다. 그러나 속성을 얻기 위해 문자열로 객체를 인덱싱하는 것은 JavaScript에서 잘 작동합니다.


47
myObj.name=value

또는

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

둘 다 서로 바꿔 사용할 수 있습니다.

편집 :myObj[prop] = value myObj [name] = value 대신 을 의미한다고 생각합니다 . 두 번째 구문이 잘 작동합니다 : http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
개체 속성이 예약어 인 경우 두 번째 구문이 필요합니다.
timw4mail 2011-06-22

이것이 맞지만 실제로 그의 질문에 대한 답은 아닙니다. 그는 속성 이름이 변수에있을 때 무엇을해야할지 궁금합니다.
Ernest Friedman-Hill

거기에 업데이트 된 답변, 당신이 있어야 할 name곳이 있습니다prop
bcoughlan 2011-06-22

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"]

그렇지 않으면 자바 스크립트가 name변수 라고 가정하고 라는 변수를 만들지 name않았기 때문에 원하는 키에 액세스 할 수 없습니다.


1
차이 거기에 여전히 myObj[name]myObj.name전자는 변수 이름과 문자 키에 두 번째 참조하기 때문에 생각은.
pimvdb 2011 년

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.