【问题标题】:How can I evaluate console.log(1+2) inside eval()?如何在 eval() 中评估 console.log(1+2)?
【发布时间】:2017-02-20 16:36:42
【问题描述】:

我正在尝试通过节点控制台发送参数并希望在 eval 函数中执行它。

我在控制台写的是这样的:

node main console.log(1+1)

main.js 文件是这样的:

var x = "";
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
  x = val;
});

var eval = require('eval')
eval("(" + x + ")");

它会抛出这个错误:

D:\Sandbox\jsdom>node main console.log(1+2)
0: C:\Program Files\nodejs\node.exe
1: D:\Sandbox\jsdom\main
2: console.log(1+2)

evalmachine.<anonymous>:1
(console.log(1+2))
 ^
ReferenceError: console is not defined
    at evalmachine.<anonymous>:1:2
    at ContextifyScript.Script.runInContext (vm.js:35:29)
    at ContextifyScript.Script.runInNewContext (vm.js:41:15)
    at module.exports (D:\Sandbox\jsdom\node_modules\eval\eval.js:69:12)
    at Object.<anonymous> (D:\Sandbox\jsdom\main.js:11:1)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

有人知道我做错了什么吗?

我在控制台中期望的输出是:

3

谢谢

【问题讨论】:

    标签: javascript node.js console eval command-line-arguments


    【解决方案1】:

    您需要将console scope 传递给eval。例如:

    var x = "";
    process.argv.forEach(function (val, index, array) {
      console.log(index + ': ' + val);
      x = val;
    });
    
    var eval = require('eval')
    eval(x, null, 'console');
    

    调用时:

    node app.js "console.log(1+1)"
    

    输出:

    2
    

    【讨论】:

    • 没问题!! :)
    猜你喜欢
    • 2020-12-11
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多