我有一个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控制台如何完成这项专长?
谢谢!
答案 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')
这是毫无意义的。