JavaScript 如何将变量评估为局部范围对象的属性而不是全局范围
How to eval variables into local scope object's properties instead of global scope in JavaScript
我有一些来自服务器的代码 return,例如 "var myVar = 314;",我想创建一个上下文对象,例如 var context = {};然后将脚本 "var myVar = 314;" 评估为上下文属性,我该如何实现?
我试过下面的代码,但没有成功:
var context = {};
eval.call(context, "var myVar = 314;");
编辑
可能是我一开始不够清楚,我期望的结果是:在eval()之后,我得到了上下文对象中的属性,目的是避免全局范围填充。
例如,
var context = {};
eval.call(context, "var myVar = 314;");
我希望结果为 context.myVar = 314。
您能更改从服务器获取的脚本格式吗?如果是这样,请按照 Aadit 评论中的建议让您的服务器发送:
context["myVar"] = 314;
或:
context.myVar = 314;
如果你不能改变格式,那么脚本真的像var myVar = 314;
那么简单吗?
如果是,请尝试重新考虑该方法。与其尝试在某些特定上下文中 eval()
脚本,不如将脚本解析为您可以使用的形式。例如:
var script = 'var myVar = -314.5;'; // what we get from the server
var match = script.match( /var\s+(\w+)\s*=\s*(-?[\d.]+)\s*;/ );
if( match ) {
// match[1] is 'myVar', match[2] is '-314.5'
context[ match[1] ] = +match[2];
}
console.log( context );
现在 context
是 { myVar: -314.5 }
。此代码可以 运行 在函数内部或任何地方,并且效果相同。
您可以对字符串变量赋值使用类似的正则表达式:
var script = 'var myString = "Test Value";'; // what we get from the server
var match = script.match( /var\s+(\w+)\s*=\s*"([^"]*)"\s*;/ );
if( match ) {
// match[1] is 'myString', match[2] is 'Test Value'
context[ match[1] ] = match[2];
}
console.log( context );
这次context
是{ myString: "Test Value" }
这种方法可以很容易地适用于多变量、其他数据类型等。
我有一些来自服务器的代码 return,例如 "var myVar = 314;",我想创建一个上下文对象,例如 var context = {};然后将脚本 "var myVar = 314;" 评估为上下文属性,我该如何实现?
我试过下面的代码,但没有成功:
var context = {};
eval.call(context, "var myVar = 314;");
编辑 可能是我一开始不够清楚,我期望的结果是:在eval()之后,我得到了上下文对象中的属性,目的是避免全局范围填充。
例如,
var context = {};
eval.call(context, "var myVar = 314;");
我希望结果为 context.myVar = 314。
您能更改从服务器获取的脚本格式吗?如果是这样,请按照 Aadit 评论中的建议让您的服务器发送:
context["myVar"] = 314;
或:
context.myVar = 314;
如果你不能改变格式,那么脚本真的像var myVar = 314;
那么简单吗?
如果是,请尝试重新考虑该方法。与其尝试在某些特定上下文中 eval()
脚本,不如将脚本解析为您可以使用的形式。例如:
var script = 'var myVar = -314.5;'; // what we get from the server
var match = script.match( /var\s+(\w+)\s*=\s*(-?[\d.]+)\s*;/ );
if( match ) {
// match[1] is 'myVar', match[2] is '-314.5'
context[ match[1] ] = +match[2];
}
console.log( context );
现在 context
是 { myVar: -314.5 }
。此代码可以 运行 在函数内部或任何地方,并且效果相同。
您可以对字符串变量赋值使用类似的正则表达式:
var script = 'var myString = "Test Value";'; // what we get from the server
var match = script.match( /var\s+(\w+)\s*=\s*"([^"]*)"\s*;/ );
if( match ) {
// match[1] is 'myString', match[2] is 'Test Value'
context[ match[1] ] = match[2];
}
console.log( context );
这次context
是{ myString: "Test Value" }
这种方法可以很容易地适用于多变量、其他数据类型等。