【发布时间】:2014-03-26 20:14:22
【问题描述】:
可能需要一名 Javascript 语言律师来处理这个问题:
var s1 = "{\"x\":\"y:z\"}"
var o = JSON.parse(s1)
var s2 = JSON.stringify(o)
$('span#s').text(s1);
$('span#s2').text(s2);
if (s1 === s2) {
$('span#areEqual').text('s1 === s2')
} else {
$('span#areEqual').text('s1 !== s2')
}
JSON.parse(s2) // okay
$('span#jsonParse').text("JSON.parse(s2) okay")
eval(s2) // bad mojo!
$('span#eval').text("eval(s2) okay")
eval("("+s2+")") // bad mojo, too!
$('span#eval2').text("eval((s2)) okay")
eval 在 s1、s2 和 "("+s2+")" 上失败。
jsFiddle here.
【问题讨论】:
-
如果你问为什么
eval给出一个 SyntaxError,那是因为该字符串不代表一个有效的 JavaScript 程序,而这正是eval所要求的。 -
@JeffLowery:不,
JSON.parse()是一个 JSON 解析器。它接受有效的 JSON,并不关心它是否是有效的 JS 程序。 -
@JeffLowery:没有。“文本必须用括号括起来,以避免在 JavaScript 语法中出现歧义。”
-
@JeffLowery:与您的说法相反,
eval("("+s2+")")不会失败。 -
您将用括号包裹的那个放在已经失败的那个下面。抛出错误时停止执行。
标签: javascript json