我有一个像这样的对象:
var context = {
"myBoolean" : true,
"myNumber" : 5,
"myObject" : {
"attr1" : "value1"
}
}
我有一个字符串,这是一个条件:
var condition = "myBoolean == true && myNumber > 3 && myObject.attr1 == 'value1'"
我希望使用condition
,myBoolean
,myNumber
来评估字符串myObject
,并将其值放在上下文中。
我接近这句话的答案:
eval("function doTest() { return " + condition + ";};"
+ "var answer = doTest.apply(context);");
但我需要在变量名前面添加this.
。所以它并不完全是我想做的事。
我知道做这样的事情听起来不是很好/安全,但我觉得答案很有趣。
答案 0 :(得分:1)
with
statement正是如此,将一个对象追加到您的范围:
var condition = "myBoolean == true && myNumber > 3 && myObject.attr1 == 'value1'"
var doTest = new Function("context", "with(context){ return "+condition+"; }");
var answer = doTest({
"myBoolean" : true,
"myNumber" : 5,
"myObject" : {
"attr1" : "value1"
}
});
请注意,with
和eval
(或Function
)因其糟糕的表现而闻名,但似乎这正是您所需要的。