从用户输入的代码中获取输出 JavaScript
Get output from user typed code JavaScript
我正在试验 Monaco(VSCode IDE 用于网络)。目标是打印用户编写的代码的输出。前用户输入 console.log("123")
然后我想得到“123”作为输出。我怎样才能做到这一点?任何正则表达式或类似的解决方案都不好。我需要代码的实际输出:
const run = () => {
const model = monaco.current.editor.getModel()
const value = model.getValue() // Value is console.log("123")
var code = new Function(value)
var code2 = eval(value) //logs "123"
console.log(code) //logs ƒ anonymous({console.log("123")}
console.log(code2) //logs undefined
const output = ?
}
<MonacoEditor
ref={monaco}
width="800"
height="600"
language="javascript"
theme="vs-dark"
value={code}
options={options}
onChange={code => setCode(code)}
/>
如何在本例中将 const output
设置为“123”?
或者只是将“123”作为此代码段的输出
var s = "console.log(123)"
alert(s)
var s = "console.log(123)"
alert(eval(s))
在上面的场景中,console.log
代码被执行并且日志记录将在控制台中完成,但是警报中的值将是 undefined
因为 return 值来自 console.log
的是 undefined
。例如:
const val = console.log('test');
到这里已经完成了日志记录,但是val
的值为undefined
。并且您正在警报语句中使用此值。
To achieve what you need you can override the logging function as follows:
Console.prototype.log = function(text) {
// your code
};
默认 console.log 函数无法做到这一点。你需要修改它。试试这个
console.tempLog = console.log;
console.log = function(value)
{
console.tempLog(value);
return value;
};
const output = eval('console.log("123")');
在这里,我创建了console.tempLog来避免递归循环!希望这对您有所帮助!
我正在试验 Monaco(VSCode IDE 用于网络)。目标是打印用户编写的代码的输出。前用户输入 console.log("123")
然后我想得到“123”作为输出。我怎样才能做到这一点?任何正则表达式或类似的解决方案都不好。我需要代码的实际输出:
const run = () => {
const model = monaco.current.editor.getModel()
const value = model.getValue() // Value is console.log("123")
var code = new Function(value)
var code2 = eval(value) //logs "123"
console.log(code) //logs ƒ anonymous({console.log("123")}
console.log(code2) //logs undefined
const output = ?
}
<MonacoEditor
ref={monaco}
width="800"
height="600"
language="javascript"
theme="vs-dark"
value={code}
options={options}
onChange={code => setCode(code)}
/>
如何在本例中将 const output
设置为“123”?
或者只是将“123”作为此代码段的输出
var s = "console.log(123)"
alert(s)
var s = "console.log(123)"
alert(eval(s))
在上面的场景中,console.log
代码被执行并且日志记录将在控制台中完成,但是警报中的值将是 undefined
因为 return 值来自 console.log
的是 undefined
。例如:
const val = console.log('test');
到这里已经完成了日志记录,但是val
的值为undefined
。并且您正在警报语句中使用此值。
To achieve what you need you can override the logging function as follows:
Console.prototype.log = function(text) {
// your code
};
默认 console.log 函数无法做到这一点。你需要修改它。试试这个
console.tempLog = console.log;
console.log = function(value)
{
console.tempLog(value);
return value;
};
const output = eval('console.log("123")');
在这里,我创建了console.tempLog来避免递归循环!希望这对您有所帮助!