简体   繁体   中英

Using a string to access a variable

I currently have a Javascript function that uses a string to reference an object name and acces its properties. I'm currently using eval() to get the the desired effect which I know is very, very wrong. Here is an example of how I'm currently achieving what I want:

var stringToObjectRef = function() {

    var myTestVar = "myTestObject";
    var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };

    var myValue = eval(myTestVar + '.item1');

    alert(myValue);

}();

I've tried using something like [myTestVar].item1, but this returns undefined. What is the correct syntax to achieve this?

Thanks in advance.

If you're talking about the item1 part, you're looking for:

myValue = myTestObject["item1"];

No need for eval . (There almost never is.)

If you're talking about getting at the myTestObject variable using a "myTestObject" string, you want to refactor the code so you're not doing that, rather than using eval . Unfortunately the variable object used for symbol resolution within the function is not accessible directly. The refactor could just use an object explicitly:

var stringToObjectRef = function() {

    var objects = {};

    var myTestVar = "myTestObject";
    objects.myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };

    var myValue = objects[myTestVar].item1;

    alert(myValue);

}();

Off-topic, I don't recall precisely why, but if you're going to execute that anonymous function immediately like that, you need to put the function expression in parentheses:

var x = (function() { return 5; })();

rather than

var x = function() { return 5; }();

Again, I don't recall why, and whether it was because of an implementation bug in a popular interpreter or an actual requirement of the syntax.

Try this instead:

var stringToObjectRef = function() {
  var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };
  var myValue = myTestObject['item1'];
  alert(myValue);
}();

eval("myTestObject[\\"item1\\"") should do the trick, as myTestObject.item1 is shorthand for myTestObject["item1"]

How do I reference an object dynamically?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM