Javascript eval返回未定义,浏览器返回结果
我有一个javascript字符串,如下所示: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
"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-如果您有一个新问题,则返回一个新问题并包括。听起来好像你不正确地使用了正则表达式,但我无法从对代码的模糊描述中判断是以什么方式使用的。实际上,我问了一个新问题。感谢您的帮助,但从新问题中给出的答案来看,问题在于字符串被括在引号中,这会影响输出。不需要进一步的工作了,先生,我想我有足够的时间开始工作了。