首页 > 关于js字符串和evl的问题

关于js字符串和evl的问题

<html>
<body>
<h2>通过 JSON 字符串来创建对象</h3>


First Name: <span id="fname"></span>

Last Name: <span id="lname"></span>


<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"George","lastName":"Bush" },' +
'{"firstName":"Thomas","lastName":"Carter" }]}';

var obj = eval ("("+txt+")");

document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
</script>
</body>
</html>
这段代码中如果把var obj = eval ("("+txt+")");改为var obj = eval (txt);就不能正常使用了 为什么?txt不就是一个字符串吗?"("+")"到底是什么意义?


由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。
txt是字符串没错,到eval里就是执行语句了。


@bk201 解释的蛮清楚了。
其实你在控制台直接输入 {a: 'value', b: 'value2'}都是执行不了的,因为被解释成代码块来执行了。你可以把它变成语句var x = {a: 'value', b: 'value2'}; 或者像这里的加上括号。


eval()函数就是执行传参的字符串中的内容,不加()相当于把字符串里的{}当做代码块了,而好像本来的意义却不是那样的。

【热门文章】
【热门文章】