在没有eval的情况下执行字符串,或者在这里使用eval
Executing a string without eval or is eval ok to use here?
有没有更好的方法来执行字符串"getData"没有eval或eval在这种情况下是一个很好的选择,因为正在评估的不是用户生成的?
object.myMainObject(Marcus)
object = {
Data = {
Marcus : function(){
alert('marcus function')
},
James : function(){
alert('james function')
}
}
myMainObject : function(string){
getData = "object.Data." + string + "()"
eval(getData)
}
}
eval
是完全不必要的在这种情况下,只需使用括号符号来动态访问命名属性:
var object = {
Data : {
Marcus : function(){
alert('marcus function');
},
James : function(){
alert('james function');
}
}
myMainObject : function(string){
var getData = object.Data[string]();
}
};
object.myMainObject("Marcus"); // 'marcus function'
指出:
- 你定义
object
的方式有一些语法错误(你使用=
,而不是:
)。 - 您没有使用
var
语句来声明object
或getData
,请在声明变量时使用var
语句,否则,它们将最终成为全局对象的属性。 作为一种安全措施,您可以在调用它之前检查被访问的成员是否实际上是一个函数,例如:
//... var getData; if (typeof object.Data[string] == 'function') { getData = object.Data[string](); } //...
不能求值
getData = object.Data[string]()
是的,有更好的方法。使用方括号表示法通过名称访问对象的属性:
object.Data[string]();
可以进行eval。虽然我真的不明白你想要达到什么目的
相关文章:
- 递归使用 eval() 是检查程序执行的好方法吗?
- 为什么忽略了eval()代码中的语法错误
- 如何删除除冒号、数字和'上午'或者'下午'
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 如何“;过滤器”;或者以其他方式重构该数据
- Javascript eval()无法处理传递的字符串
- 调用绕过eval()的函数
- Semi-sandboxing Javascript eval
- 哪个布尔运算更快<或者<=
- ES6 模板文字是否比 eval 更安全
- JavaScript 可以在这里使用 eval 吗?
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 或者在表单上选择默认选项文本(选择1)
- 试图修改此javascript代码以减小弹出窗口的大小,或者在用户单击框外时关闭
- 如何使用uglifyjs/uglifyjs2解析walk和eval javascript表达式
- JQuery是否有一个“;移动“;作用或者有没有一种更紧凑的方法来做到这一点
- 咖啡'@'或者这在函数和类中
- 跳转字典"切换语句,或者如何跳转字典"没有eval
- 这里的eval是如何工作的或者它是如何表现的
- 在没有eval的情况下执行字符串,或者在这里使用eval