javascript - 关于js字符串和evl的问题
伊谢尔伦
伊谢尔伦 2017-04-10 16:05:41
[JavaScript讨论组]

<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不就是一个字符串吗?"("+")"到底是什么意义?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
ringa_lee

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

阿神

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

迷茫

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号