Convert string to variable name in JavaScript

Convert string to variable name in JavaScript

I’ve looked for solutions, but couldn’t find any that work.
I have a variable called onlyVideo.
“onlyVideo” the string gets passed into a function. I want to set the variable onlyVideo inside the function as something. How can I do that?
(There are a number of variables that could be called into the function, so I need it to work dynamically, not hard coded if statements.)
Edit: There’s probably a better way of doing what you’re attempting to do. I asked this early on in my JavaScript adventure. Check out how JavaScript objects work.
A simple intro:
// 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;

Related:  Using a Rails helper method within a javascript asset

Solutions/Answers:

Solution 1:

If it’s a global variable then window[variableName]
or in your case window["onlyVideo"] should do the trick.

Solution 2:

Javascript has an eval() function for such occasions:

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

Edit: Sorry, I think I skimmed the question too quickly. This will only get you the variable, to set it you need

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

or if using a string:

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

But I imagine there is a more appropriate way to accomplish what you’re looking for? I don’t think eval() is something you really want to use unless there’s a great reason for it. eval()

Solution 3:

As far as eval vs. global variable solutions…

I think there are advantages to each but this is really a false dichotomy.
If you are paranoid of the global namespace just create a temporary namespace & use the same technique.

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

tempNamespace[myString] = 5;

Pretty sure you could then access as tempNamespace.myVarProperty (now 5), avoiding using window for storage. (The string could also be put directly into the brackets)

Related:  Ajax, prevent multiple request on click

Solution 4:

var myString = "echoHello";

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

echoHello();

Say no to the evil eval. Example here: https://jsfiddle.net/Shaz/WmA8t/

Solution 5:

You can access the window object as an associative array and set it that way

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

Solution 6:

The window[‘variableName’] method ONLY works if the variable is defined in the global scope. The correct answer is “Refactor”. If you can provide an “Object” context then a possible general solution exists, but there are some variables which no global function could resolve based on the scope of the variable.

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