我希望通过使用它来获取本地对象变量的属性的值"完全限定的"变量名。
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()
,但如果必须,我会这样做。但是,我需要能够验证它评估的字符串是否已经过消毒,并且除了访问该属性之外,还不会做任何其他事情。
答案 0 :(得分:1)
您可以将eval()
用于此目的,
var obj = { prop: "val" };
var valueStr = "obj.prop";
var func = function(str){ console.log(eval(str)) };
func.call(obj, valueStr);
只需将执行scope
的{{1}}更改为eval
,然后将object
传递给string
。