【发布时间】:2016-03-22 19:28:10
【问题描述】:
我想通过使用它的“完全限定”变量名来获取局部对象变量的属性值。
function foo() {
var obj = {
prop: "val"
}
var valueStr = "obj.prop";
var value = // code here that gets value using valueStr
}
我见过this answer 用于从字符串中获取全局变量,我见过this other answer 用于使用字符串从对象中获取属性,但是获取对象的最简单方法是什么 AND 该对象的属性全部来自字符串?我不希望我的对象必须是全局的。
这是我目前正在做的解决此问题的方法,但它要求将对象设为全局变量。
var valueStrParts = valueStr.split(".");
var value = window[valueStrParts[0]][valueStrParts[1]];
我宁愿不使用eval(),但如果必须,我会使用。但是,我需要能够验证它评估的字符串是否已经过清理,并且除了访问属性之外不会做任何事情。
【问题讨论】:
-
obj 是全局变量吗?
-
抱歉,我的问题措辞有误。我已经修好了
-
除了在特定设置中使用
eval之外似乎没有其他方法。但是,您可以声明一个将所有变量作为属性保存的对象。 See this and look how the variables are defined in the function。然后你可以做myWrappingObj[...][...] -
你为什么害怕使用 eval?这在所有情况下都不是邪恶的。当您使用它来更改范围链时,它将消耗性能。但是在您的情况下,我们只是在访问一个属性。这不会影响任何事情。
-
@Raj 我实际上是在使用它来回答this question。如果我确实使用 eval,我希望能够首先清理字符串,这样我除了访问属性之外什么都不做。
标签: javascript string object properties