[javascript] JavaScript에서 문자열을 변수 이름으로 변환

해결책을 찾았지만 그 해결책을 찾지 못했습니다.

라는 변수가 onlyVideo있습니다.

"onlyVideo"문자열은 함수로 전달됩니다. onlyVideo함수 내부의 변수 를 무언가 로 설정하고 싶습니다 . 어떻게해야합니까?

(함수에 호출 될 수있는 많은 변수가 있으므로 하드 코딩 된 if명령문이 아닌 동적으로 작동해야합니다 .)

편집 : 아마도 당신이하려는 일을하는 더 좋은 방법이있을 것입니다. JavaScript 어드벤처에서 초기에 이것을 물었습니다. JavaScript 객체의 작동 방식을 확인하십시오.

간단한 소개 :

// create JavaScript object
var obj = { "key1": 1 };

// assign - set "key2" to 2
obj.key2 = 2;

// read values
obj.key1 === 1;
obj.key2 === 2;

// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;

// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;



답변

전역 변수 인 경우 window[variableName]
또는 귀하의 경우 window["onlyVideo"]트릭을 수행해야합니다.


답변

Javascript에는 eval()다음과 같은 기능이 있습니다.

function (varString) {
  var myVar = eval(varString);
  // .....
}

편집 : 죄송합니다. 질문을 너무 빨리 감추었습니다. 이것은 변수를 가져 와서 필요한 것으로 설정합니다.

function SetTo5(varString) {
  var newValue = 5;
  eval(varString + " = " + newValue);
}

또는 문자열을 사용하는 경우 :

function SetToString(varString) {
  var newValue = "string";
  eval(varString + " = " + "'" + newValue + "'");
}

그러나 당신이 찾고있는 것을 성취하는 더 적절한 방법이 있다고 생각합니까? 나는 eval ()이 좋은 이유가 없다면 정말로 사용하고 싶은 것이라고 생각하지 않습니다. eval ()


답변

평가 대 글로벌 변수 솔루션까지 …

나는 각각에 장점이 있다고 생각하지만 이것은 실제로 잘못된 이분법입니다. 글로벌 네임 스페이스에 대한 편집증이라면 임시 네임 스페이스를 만들고 동일한 기술을 사용하십시오.

var tempNamespace = {};
var myString = "myVarProperty";

tempNamespace[myString] = 5;

그런 다음 저장 창을 사용하지 않고 tempNamespace.myVarProperty (현재 5)로 액세스 할 수 있는지 확인하십시오. (끈은 괄호에 직접 넣을 수도 있습니다)


답변

var myString = "echoHello";

window[myString] = function() {
    alert("Hello!");
}

echoHello();

받는 사람 아무 말도 악마의 평가. 예 : https://jsfiddle.net/Shaz/WmA8t/


답변

창 객체를 연관 배열로 액세스하여 그렇게 설정할 수 있습니다

window["onlyVideo"] = "TEST";
document.write(onlyVideo);


답변

window [ ‘variableName’] 메소드는 변수가 전역 범위에 정의 된 경우에만 작동합니다. 정답은 “리 팩터”입니다. “객체”컨텍스트를 제공 할 수있는 경우 가능한 일반적인 솔루션이 존재하지만 변수의 범위를 기반으로 전역 함수가 해결할 수없는 일부 변수가 있습니다.

(function(){
    var findMe = 'no way';
})();


답변

객체의 속성에 액세스하려는 경우 객체의 범위로 시작하여 원하는 window속성에 도달 할 때까지 객체의 각 속성을 통과해야합니다. a.b.c스크립트 어딘가에 정의되어 있다고 가정하면 다음을 사용할 수 있습니다.

var values = window;
var str = 'a.b.c'.values.split('.');

for(var i=0; i < str.length; i++)
    values = values[str[i]];

깊이에 관계없이 모든 객체의 속성을 얻는 데 효과적입니다.