在没有eval的情况下执行字符串,或者在这里使用eval

Executing a string without eval or is eval ok to use here?

本文关键字:eval 或者 在这里 字符串 执行 情况下      更新时间:2023-09-26

有没有更好的方法来执行字符串"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语句来声明objectgetData,请在声明变量时使用var语句,否则,它们将最终成为全局对象的属性。
  • 作为一种安全措施,您可以在调用它之前检查被访问的成员是否实际上是一个函数,例如:

    //...
    var getData;
    if (typeof object.Data[string] == 'function') {
       getData = object.Data[string]();
    }
    //...
    

不能求值

getData = object.Data[string]()

是的,有更好的方法。使用方括号表示法通过名称访问对象的属性:

object.Data[string]();

可以进行eval。虽然我真的不明白你想要达到什么目的