为什么JSON.parse(JSON.stringify())失败了一个简单的字典?

sor*_*rin 0 javascript

而不是向我显示字典,这在解析字符串时会出错.

var mycode = "var data = " + JSON.stringify({"a":"b"}) + "; alert(JSON.parse(data));"
eval(mycode);
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 6

当你这样做

"var data = " + JSON.stringify({"a":"b"}) + ";
Run Code Online (Sandbox Code Playgroud)

你最终得到了字符串

var data = {"a":"b"};
Run Code Online (Sandbox Code Playgroud)

请注意,对象周围没有引号,当该字符串传递给eval它时,它被评估为对象,而不是字符串.
如果没有引用字符串,JSON字符串也是有效的JavaScript对象,您必须实际添加引号

"var data = '" + JSON.stringify({"a":"b"}) + "';
Run Code Online (Sandbox Code Playgroud)

哪个会给你

var data = '{"a":"b"}';
Run Code Online (Sandbox Code Playgroud)

当你传递一个JavaScript对象时,JSON.parse它被转换为一个字符串,而一个对象的字符串表示[object, Object],如果o字母上有错误,因为它不是一个可以解析为JSON的对象.

它不是stringify不会创建一个字符串,它确实如此,只是你正在创建的javascript字符串有一个对象作为data变量的值,而不是一个字符串,并且在评估代码时,它试图解析那个对象JSON.parse.