传递变量而不是硬编码值时,JavaScript函数不起作用

时间:2019-04-30 09:02:34

标签: javascript jquery arrays typescript object

我有如下的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” 这里出了什么问题。请提出。

1 个答案:

答案 0 :(得分:1)

如果obj.id是字符串AuditForm,那么您别无选择,只能在全局window对象上使用动态属性符号,或者如果没有,则使用eval。在全局范围内用AuditForm声明var

如果您在全局范围内用AuditForm声明了var

fileIt(window[formID]);

如果不这样做:

fileIt(eval(formID));

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

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

eval(obj.id);