javascript - 如何在 eval() 中评估 console.log(1+2) ?

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

我尝试通过 Node 控制台发送参数并希望在 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

谢谢

最佳答案

您需要将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

关于javascript - 如何在 eval() 中评估 console.log(1+2) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349792/

相关文章:

javascript - 如何使用 javascript/在 html 中动态附加 div 标签

mongodb - 用 $ 更新数组在 mongodb-native nodejs 中不起作用

python - 对于 python 我如何使用我的应用程序的控制台来执行我的命令之一

ruby-on-rails - 无法在生产中启动 Rails 控制台

c# - 初学者的数据库问题

javascript - Angular 选项未显示在下拉列表中

javascript - 在 JS/JQ 中动态加载时选择一个元素

node.js - 多次写入时 Node 网络数据合并

javascript - 使用原型(prototype)创建带有方法的数组

node.js:如何锁定/同步代码块?