string作为对象变量的对象引用

时间:2011-09-28 12:54:29

标签: javascript

var string = 'object.data.path';

这是一个类似于变量路径的字符串。

如何从该字符串返回相应的变量?

将字符串转换为return object.data.path;

之类的内容

这背后的事情是字符串可能更长(更深),如:

var string = 'object.data.path.original.result';

2 个答案:

答案 0 :(得分:3)

function GetPropertyByString(stringRepresentation) {
    var properties = stringRepresentation.split("."),
        myTempObject = window[properties[0]];
    for (var i = 1, length = properties.length; i<length; i++) {
    myTempObject = myTempObject[properties[i]];
    }

    return myTempObject;
}


alert(GetPropertyByString("object.data.path"));

这假定您的第一级对象(在本例中称为object)是全局的。 或者,虽然不推荐,但您可以使用eval函数。

答案 1 :(得分:3)

假设您不想只使用eval,您可以尝试这样的事情:

function stringToObjRef(str) {
   var keys = str.split('.'),
       obj = window;
   for (var i=0; i < keys.length; i++) {
      if (keys[i] in obj)
         obj = obj[keys[i]];
      else
         return;
   }

   return obj;
}

console.log(stringToObjRef('object.data.path.original.result'));

使用for循环一次降低一级,如果链中的特定键未定义则返回undefined。