eval 返回 undefined,浏览器返回一个结果

eval returning undefined, browser returning a result

我有一个 javascript 字符串,如下所示:

"h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o")

如果我将字符串保存到一个变量并对其求值,它return未定义:

var str = "h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o");
var x = eval (str);
console.log(x) // undefined

但是,如果我将字符串粘贴到 Chrome JS 控制台,它 return 如预期的那样:

"hello"

为什么 eval 会 return 未定义,JS 控制台是如何完成这项壮举的?

谢谢!

表达式 "h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o") 的计算结果为字符串 "hello"

如果您将其粘贴到 Chrome 控制台,那么您将得到它评估显示的内容。

如果将它传递给 eval,则表达式的计算结果为字符串 "hello",然后 eval 获取该字符串并计算为 变量名 hello 未定义。

如果你只是想把"hello"变成一个变量,那么不要使用eval,使用赋值。

var x = "h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o");
console.log(x);

当您将字符串粘贴到控制台时,它会立即评估您定义的操作,从而获得正确的

"hello"

结果。但是,当您转到 eval 时,您应该看到 "ReferenceError: hello is not defined." 这是因为字符串操作再次被立即解析,因此您对 eval 的调用变为

eval('hello')

没有意义。