不使用 eval 计算对象表达式

Evaluate object expressions without using eval

如何在不使用 eval 的情况下评估 js 对象表达式。例如

'd3.scale.category10().domain(d3.range(m))'

'd3.range(n).map(function() {//body})'

我想得到像

这样的输出
var a = d3.scale.category10().domain(d3.range(m));

您可以创建一个 <script> 元素并将字符串设置为 textContent,然后将脚本元素附加到文档中

var command = 'console.log("test")';
var s = document.createElement("script");
s.textContent = command;
document.head.appendChild(s);

您也可以将字符串传递给 Function(),这将创建一个以该字符串作为函数主体的函数,然后执行返回的函数。

var body = 'console.log("test")';
var testFn = Function(body);
testFn();

在您的特定情况下,如果 var a = 不存在,您必须将其添加到字符串之前。如果您使用 Function() 方式,您还必须在该函数中使用该变量,因为 var 将使其仅限于该函数。