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

时间:2016-02-25 22:01:21

标签: javascript eval

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

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

如果我将字符串保存到变量并对其进行评估,则返回undefined:

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

但是,如果我将字符串粘贴到Chrome JS控制台中,它会按预期返回:

"hello"

eval将返回undefined的原因是什么,以及JS控制台如何完成这项专长?

谢谢!

2 个答案:

答案 0 :(得分:2)

表达式"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);

答案 1 :(得分:0)

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

"hello"

结果。但是,当您转到eval时,您应该看到“ReferenceError:hello未定义”。这是因为字符串操作再次立即被解决,因此您对eval的调用变为

eval('hello')

这是毫无意义的。