This question already has answers here:
Using a string to access a variable
                                
                                    (3个答案)
                                
                        
                                在8个月前关闭。
            
                    
我有一个JS功能如下

// A simple array where we keep track of things that are filed.
filed = [];

function fileIt(thing) {
  // Dynamically call the file method of whatever 'thing' was passed in.
  thing.file();

  // Mark as filed
  filed.push(thing);
}


现在,函数fileIt(thing)在如下调用时运行良好

fileIt(AuditForm);


而当我尝试传递如下变量时,它在行thing.file();处给出错误

var formID = obj.id;
fileIt(formID);


变量formID具有相同的值,即“ AuditForm”在这里出了什么问题。请提示。

最佳答案

如果obj.id是字符串AuditForm,则别无选择,只能在全局window对象上使用动态属性表示法,或者,如果未在eval上用AuditForm声明var,则使用AuditForm。全球范围:

如果在全局范围内用var声明eval

fileIt(window[formID]);


如果您不这样做:

fileIt(eval(formID));


请注意,obj.id是一个非常差的选择,就像eval可以解释为其他代码一样,例如将评估另一个调用,然后可以执行恶意操作。例:



const obj = {
  id: "eval('alert(\"Inside an eval script!\")')"
};

eval(obj.id);

09-12 05:53