eval()在解析json对象时是非强制性的吗?
问题描述:
<!DOCTYPE html>
<html>
<body>
<h2>JSON Object Creation in JavaScript</h2>
<p>
Name: <span id="jname"></span><br />
Eval Name: <span id="evalname"></span><br />
<p>
<script>
var yyyy= {
"name":"John Johnson",
"street":"Oslo West 555",
"age":33,
"phone":"555 1234567"};
document.getElementById("jname").innerHTML = yyyy.name;
document.getElementById("evalname").innerHTML = eval(yyyy).name;
</script>
</body>
</html>
我得到了把下面这个是相同的有和无的eval()eval()在解析json对象时是非强制性的吗?
在JavaScript JSON对象创建
名称:约翰·约翰逊
评估和演示名称:约翰·约翰逊
答
yyyy
不是JSON。这是一个JavaScript对象。所以在这种情况下,你不需要eval
。当您处理JSON时,您应该使用JSON.parse
而不是eval
。
eval
只是返回您传递给它的对象,而不修改它。所以在这里是多余的。
+2
更好:“你**应该**总是使用'JSON.parse'而不是'eval'”(因为速度更快,没有'eval'的内在安全问题)。 – 2012-07-17 13:46:25
答
JSON是一个序列化协议,受Javascript启发(并命名为)。你有什么是一个实际的JavaScript对象。 JSON将作为来自服务器的响应到达浏览器,并且您将不得不使用某些东西将字符串解码为Javascript对象。 JSON.parse
是最好的选择。 eval
也适用于此,但是是一个非常钝和危险的工具。
您可以在服务器端使用JSON编码器将Javascript对象插入到服务器生成的Javascript中,这可能是您如何得到所显示的代码。在这种情况下,根本不需要解码器,您可以简单地使用该对象,如第一个示例中所示。
有没有这样的事情作为一个JSON对象,这不是JSON – Esailija 2012-07-17 13:45:04
请参阅http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – Matt 2012-07-17 13:46:40
这就是一个正常的js对象... – OptimusCrime 2012-07-17 13:46:44