[javascript] JavaScript에서 동적 변수 이름 사용

PHP에서는 다음과 같이 놀랍고 끔찍한 일을 할 수 있습니다.

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

Javascript로 이와 같은 작업을 수행하는 방법이 있습니까?

var name = 'the name of the variable';를 들어 변수가 name있다면 이름을 가진 변수에 대한 참조를 얻을 수 있습니까?



답변

ECMA- / 자바 스크립트는 모든 것 ( ObjectsContexts일종의 Object) 에 관한 것이므로 모든 변수는 Variable 이라는 (또는 Function, Activation Object의 경우 )에 저장됩니다.

따라서 다음과 같은 변수를 작성하면

var a = 1,
    b = 2,
    c = 3;

에서 글로벌 범위 (= NO 기능 컨텍스트), 당신은 암시 적으로이 변수 쓰기 글로벌 객체 (= window브라우저에서)를.

“dot”또는 “bracket”표기법을 사용하여 액세스 할 수 있습니다.

var name = window.a;

또는

var name = window['a'];

때문 만이 특정 인스턴스에서 전역 객체에 대한 작동 변수 오브젝트글로벌 개체 는 IS window객체 자체. 함수의 컨텍스트 내에서는 활성화 객체에 직접 액세스 할 수 없습니다 . 예를 들어 :

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new자체 정의 객체 (컨텍스트)의 새 인스턴스를 만듭니다. new기능의 범위가 없으면 global(= 창)이됩니다. 이 예는 경고 것 undefined1각각. 우리가 다음 this.a = 1; this.b = 2과 같이 교체한다면 :

var a = 1,
    b = 2;

두 경고 출력은 모두 정의되지 않습니다. 이 시나리오에서는 변수 a와는 b에서 정품 인증 개체에 저장된 얻을 것이다 foobar우리가하지 액세스 (물론 우리가 호출하여 직접 그 액세스 할 수 할 수있는, a그리고 b).


답변

eval 하나의 옵션입니다.

var a = 1;
var name = 'a';

document.write(eval(name)); // 1


답변

window 객체를 사용하여 얻을 수 있습니다.

window['myVar']

window 사용중인 모든 전역 변수 및 전역 함수에 대한 참조가 있습니다.


답변

나쁜 답변이 얼마나 많은 표를 얻는 지 모릅니다. 대답하기는 쉽지만 복잡하게 만듭니다.

// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000;  // in a function we use "this";
alert(article_count);


답변

a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

이 시도…


답변

이것은 예입니다 :

for(var i=0; i<=3; i++) {
    window['p'+i] = "hello " + i;
}

alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3

다른 예시 :

var myVariable = 'coco';
window[myVariable] = 'riko';

alert(coco); // display : riko

따라서 myVariable의coco ” 값 은 변수 coco가 됩니다.

전역 범위의 모든 변수는 Window 개체의 속성이므로


답변

Javascript에서는 모든 속성이 키 값 쌍이라는 사실을 사용할 수 있습니다. jAndy는 이미 이것을 언급했지만 그의 대답이 어떻게 악용 될 수 있는지는 생각하지 않습니다.

일반적으로 변수 이름을 보유 할 변수를 만들지 않고 변수 이름을 생성 한 다음 사용하려고합니다. PHP는 $$var표기법으로 수행하지만 속성 키는 배열 키와 상호 교환 가능하므로 Javascript는 필요하지 않습니다.

var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);

일반적으로 변수를 구성하려고합니다. 간접적 인 이유가 있으므로 다른 방법으로도 할 수 있습니다.

var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);