JavaScript范围内的eval,未定义值
|
作为模板引擎的一部分,我需要能够评估JavaScript中的表达式,例如:
全局命名空间的某些对象服务角色中的“ 0”。因此,对象的属性应视为全局变量。
到目前为止,我想到了这个功能:
function scopedEval(str, scope) {
var f = new Function(\"scope\", \"with(scope) { return (\" + str + \"); }\");
return f(scope);
}
一切都很好,我可以将其运行为:
var scope = { first:1, second:2 };
var expr1 = \"first || second\";
alert( scopedEval(expr1,scope) );
它会提醒我1
。
范围对象中未定义的变量的唯一问题。这个:
var expr2 = \"third || first || second\";
alert( scopedEval(expr2,scope) );
生成错误“未定义变量ѭ5”。但我希望将所有未知变量解析为undefined
,而不是抛出错误。因此,“第三||第一||第二”应再次屈服于1
。
就我所知,在现代JavaScript中这是不可能的,但是我可能会想念这样的东西。有任何想法吗?
下面是一个示例:http://jsfiddle.net/nCCgT/
没有找到相关结果
已邀请:
3 个回复
视蕉梁拌客
查找(潜在)标识符,然后将其添加到
中,如下所示:
粳饶瓢部
田眯衅
可能需要在此处和此处进行一些更好的检查,但是该方法适用于您的小提琴:) http://jsfiddle.net/nCCgT/1/