如何将变量求值到局部作用域对象's属性,而不是JavaScript中的全局范围
How to eval variables into local scope object's properties instead of global scope in JavaScript
我从服务器返回了一些代码,比如"var myVar=314;",我想创建一个上下文对象,比如so var context={};然后将脚本"varmyVar=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" }
这种方法可以很容易地适用于多个变量、其他数据类型等。
相关文章:
- 保存具有相同属性 JavaScript 的元素上的值
- DOM 元素上的空样式属性:JavaScript
- 基于一个属性Javascript检索多个对象
- xml获取属性javascript不会;无法处理childNodes
- 当输入填充了必需的属性javascript/html/css时,如何更改焦点颜色
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 向嵌套对象添加属性 - Javascript
- 属性 Javascript 的访问属性
- 更改链中的 css 属性 - JavaScript
- 更改属性 Javascript 方式的值
- 如何从 url 解析 xml 获取属性 javascript
- 语法错误:缺少:在属性 javascript 之后
- 创建 if 条件基于 CSS 属性 -- JavaScript
- 访问节点的属性javascript二进制搜索树
- 访问父函数属性Javascript
- 为什么未定义此对象的属性?Javascript
- 访问私有属性Javascript OOP
- 访问数组中的属性?(Javascript)
- 动态添加参数作为对象的属性-JavaScript
- 冲突/方法/属性Javascript错误