这可能需要一位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")
< p > eval
在 s1
、s2
和 "("+s2+")"
上均失败。
jsFiddle 的链接在这里。
eval
会出现SyntaxError,那是因为该字符串不代表一个有效的JavaScript程序,而这正是eval
所需要的。 - cookie monsterJSON.parse()
是一个JSON解析器。它接受有效的JSON,并不关心它是否是有效的JS程序。 - cookie monstereval("("+s2+")")
并不会失败。 - Chuck