JavaScript给定的String是否作为变量和函数存在

时间:2019-01-02 17:58:20

标签: javascript

我有一个变量,它的成员变量是一个函数

let test = {
 setup: function() { ...}
}

从其他来源,我得到了字符串“ test.setup”

我如何检查

a。)变量测试存在

b。)变量测试有一个名为setup的子项

c。)子设置是功能吗?

d。)调用函数

我已经测试过

let variableName = "test.setup";

window[variableName] 
// undefined

{}.toString.call(variableName ) === '[object Function]' 
// VM2052:1 Uncaught SyntaxError: Unexpected token .

window.hasOwnProperty("test")
// false

如果您能解决我的问题,那就太好了。对我来说,看看是否有这样的函数就足够了,如果有的话就调用它。否则,通知用户没有此功能。

非常感谢您

1 个答案:

答案 0 :(得分:1)

最简单,最不安全的方法是使用eval()。永远不要对用户生成的数据使用eval(),因为它是攻击媒介。

let test = { setup: function() { return "HelloWorld"; }
let x = eval("typeof test.setup");
console.log(typeof x); // prints function
console.log(x()); // prints "HelloWorld";

如果在未定义的变量上评估“ .setup”,则会出现错误。因此,您可以使用try/catch来解决这个问题。

function exists(value) {
      try {
          return eval(value);
      } catch(e) {
          return undefined;
      }
}

console.log(exists("typeof test.setup")); // prints a type if it exists, or undefined