如果未定义,则强制javascript将变量视为字符串

时间:2019-06-07 23:06:35

标签: javascript node.js

假设我们有一个像这样的函数test

function test(input) {
    console.log(input);
}

我们可以简单地这样称呼它:

test("hello");

现在,我的问题是我有一个像这样的字符串: test(hello); test(world); test(foo); test(bar);

我需要跑步。我使用eval这样做,但是因为未定义变量hellowordfoobar,...,eval会抛出ReferenceError

我需要以某种方式强制JavaScript将所有未定义的变量视为字符串。我需要它像这样运行: test("hello"); test("world"); test("foo"); test("bar");

有时还会有嵌套函数。

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

由于您将输入作为字符串输入-您可以尝试将所有(替换为(",并将所有)替换为"),以便在内部转换var括号成字符串。

function test(str) {
  console.log(str);
}

var initialString = "test(hello); test(world); test(foo); test(bar);";

var transformedString = initialString.replace(/\((\w+)\)/g, '("$1")');

eval(transformedString);

eval("test(test(test(test(test(hello)))))".replace(/\((\w+)\)/g, '("$1")'));

但是,绝对地,这不是一个好的解决方案(如评论中所述),而只是一种蛮力的方法。

更新:已更新答案以支持嵌套调用。