Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript eval返回未定义,浏览器返回结果_Javascript_Eval - Fatal编程技术网

Javascript eval返回未定义,浏览器返回结果

Javascript eval返回未定义,浏览器返回结果,javascript,eval,Javascript,Eval,我有一个javascript字符串,如下所示: "h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o") 如果我将字符串保存到变量并对其求值,则返回为未定义: var str = "h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o"); var x = eval (str); console.log(x) // undefined 但是,如果我将字符串粘贴到Chrom

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

"h" + "e" + "l" + ("foo", "bar", "l") + ("abc", "def", "o")
如果我将字符串保存到变量并对其求值,则返回为未定义:

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控制台是如何完成这一壮举的

谢谢

表达式
“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);
表达式
“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未定义”。这是因为字符串操作再次被立即解析,因此您对eval的调用变为

eval('hello')

这是没有意义的。

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

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

eval('hello')

这是毫无意义的。

您正在执行的是
console.log(str)
而不是
console.log(x)
您的逗号运算符使示例相当混乱……您希望
hello
返回什么?确切地说,字符串“hello”,即串联的产物,您希望
eval()
什么都不做吗
console.log(“hello”)
应该与
console.log(eval(“hello”))
相同?@m0atz,计算字符串
hello
与在控制台中键入单词
hello
完全相同。除非它被定义为其他地方的变量,否则您将得到一个引用错误。也许您想要的是等价于
eval('hello')
,它将返回字符串
'hello'
。例如,将字符串
var str=“'h”+“e”+“l”+(“foo”、“bar”、“l”)+(“abc”、“def”、“o”)
它会做你期望的事情你正在做的是
console.log(str)
而不是
console.log(x)
你的逗号运算符让这个例子很混乱…你期望
hello
返回什么?确切地说,字符串“hello”,即串联的产物,你期望
eval()
什么都不做吗
console.log(“hello”)
应该与
console.log(eval(“hello”))
相同?@m0atz,计算字符串
hello
与在控制台中键入单词
hello
完全相同。除非它被定义为其他地方的变量,否则您将得到一个引用错误。也许您想要的是等价于
eval('hello')
,它将返回字符串
'hello'
。例如,将字符串
var str=“'h”+“e”+“l”+(“foo”、“bar”、“l”)+(“abc”、“def”、“o”)它会做你期望的事情啊!这就是我感到困惑的地方。现在我明白了,谢谢!我遇到的额外问题-如果我硬编码“h”+“e”。。。如上所述,该作业非常有效。如果我通过从正则表达式中提取字符串并调用此y来获取字符串,则指定x=y并将x打印到控制台将仍然返回原始字符串,而不是“hello”@m0atz-如果您有一个新问题,则返回一个新问题并包括。听起来好像你不正确地使用了正则表达式,但我无法从对代码的模糊描述中判断是以什么方式使用的。实际上,我问了一个新问题。感谢您的帮助,但从新问题中给出的答案来看,问题在于字符串被括在引号中,这会影响输出。不需要进一步的工作,先生,我想我有足够的时间开始工作了。啊!这就是我感到困惑的地方。现在我明白了,谢谢!我遇到的额外问题-如果我硬编码“h”+“e”。。。如上所述,该作业非常有效。如果我通过从正则表达式中提取字符串并调用此y来获取字符串,则指定x=y并将x打印到控制台将仍然返回原始字符串,而不是“hello”@m0atz-如果您有一个新问题,则返回一个新问题并包括。听起来好像你不正确地使用了正则表达式,但我无法从对代码的模糊描述中判断是以什么方式使用的。实际上,我问了一个新问题。感谢您的帮助,但从新问题中给出的答案来看,问题在于字符串被括在引号中,这会影响输出。不需要进一步的工作了,先生,我想我有足够的时间开始工作了。