抛弃eval吧。

llyy112233 2011-05-30 02:56:24
加精
刚看了这篇帖子 eval 获得对象用法 请教达人 有点感想,发上来供大家参考。

eval在javascript语言精粹中被作者归为js的鸡肋特性之一,刚温习了下本书,下面是该书对eval的描述:

eval函数传递一个字符串给javascript编译器,并且执行其结果。它是一个被滥用得最多的javascript特性。那些对javascript语言一知半解的人们最常用到它。例如:如果你知道点表示法,但不知道下标表示法,就可能会这么写:

eval("myValue = myObject." + myKey + ";");


而不是这么写:

myValue = myObject[myKey];


使用eval形式的代码会更加难以阅读。这种形式将使得性能显著降低,因为它必须运行编译器,但也许只是为了执行一个微不足道的赋值语句。它会让JSLint失效,因此该工具检测问题的能力也会显著降低。

eval函数还减弱了你的应用的安全性,因为它给被求值的文本赋予了太多的权力。而且就像with语句执行的方式一样,它降低了语言的性能。

Function构造器是eval的另一种形式,所以它同样也应该被避免使用。

浏览器提供的setTimeout和setInterval函数,它们能接收字符串参数或函数参数。

当传递的是字符串参数时,setTimeout和setInterval会像eval那样去处理。字符串参数形式也应该被避免使用。



个人在开发中没有碰到过必须用eval的时候,都可以用别的形式替换,所以让我们抛弃eval吧。
...全文
14173 138 打赏 收藏 转发到动态 举报
写回复
用AI写文章
138 条回复
切换为时间正序
请发表友善的回复…
发表回复
小码夫 2014-02-08
  • 打赏
  • 举报
回复
新手混经验.............
ImN1 2013-11-22
  • 打赏
  • 举报
回复
引用 136 楼 maobushigou 的回复:
[quote=引用 3 楼 snmr_com 的回复:] ajax怎么处理扔过来的js呢?
现在大部分都提供了专门的函数来解析json[/quote] 你好像没分清 js 和 json 的概念 两年前的坟就不要挖了吧……
binary_hackboy 2013-11-22
  • 打赏
  • 举报
回复
引用 3 楼 snmr_com 的回复:
ajax怎么处理扔过来的js呢?
现在大部分都提供了专门的函数来解析json
yksyuan 2013-06-25
  • 打赏
  • 举报
回复
呃,ajax读取的json时怎么代替啊?
pichunhan 2013-06-25
  • 打赏
  • 举报
回复
[quote=引用 11 楼 wtcsy 的回复:] [Quote=引用 3 楼 snmr_com 的回复:] ajax怎么处理扔过来的js呢? [/Quote] lz 都说了可以用new Function [code=JScript]var c = new Function('return {a:"b"}')(); alert(c.a);[/cod ge] 我个人觉得这个比eval的可读性更差.除了卖弄下,没有其他功能
hetengfei_ 2011-11-24
  • 打赏
  • 举报
回复
try
{
eval('$("#btnCheck").val($("#"'+$("#txtIn").length+'));');
}
catch(ex)
{
$("#btnCheck").val("输入的是非法字串");
}
hetengfei_ 2011-11-24
  • 打赏
  • 举报
回复
我问你一个问题,你解快才服你,不用eval () 就搞不定这个问题。
// 一个在线 控件查找器。

<input type="text" id="txtIn" />
<textarea id="txtOut" row='20' col='80'/>
<input type="button" id="btnCheck" value="IsTheControlsAtThePage"/>

用eval 的方法如下:
try
{
eval('$("#btnCheck").val($("#"'+$("#txtIn")+'));');
}
catch(ex)
{
$("#btnCheck").val("输入的是非法字串");
}

不是我说你 要反对eval
你不用eval 怎么做得到?(就算做到了,也是绞尽脑子)



loveelwin 2011-10-08
  • 打赏
  • 举报
回复
eval相当于在运行时再次调用解释引擎对内容进行解释运行,这会消耗大量的时间。并且貌似eval可以破解闭包中的私有域属性,并对其进行修改,这就会导致不安全。 同时,对于eval,可以使用javascript闭包实现函数模板以替代eval()方法。
hans8 2011-08-19
  • 打赏
  • 举报
回复
刚学习js时候,一些动态调用很是头疼,直道某天知道了eval,js怎么会有这么强力的方法!

从此觉得eval就像神一般,一直被我当做秘密武器,因为我相信遇到再棘手的,eval也能帮我解决!

慢慢地懂的多了点,eval出场率少了,但是eval如定海针一样陪伴我成长。。。

必须膜拜eval!!!
iLove9ouHenry 2011-07-23
  • 打赏
  • 举报
回复
dingding!
wangzhen1985 2011-06-14
  • 打赏
  • 举报
回复
基本不用
mayazxf427 2011-06-12
  • 打赏
  • 举报
回复
学习,路过
iever123 2011-06-10
  • 打赏
  • 举报
回复
就没用过,何来抛弃。。。
sunguojuan 2011-06-10
  • 打赏
  • 举报
回复
还不错、、
jiambet 2011-06-10
  • 打赏
  • 举报
回复
围观下
c__sys 2011-06-09
  • 打赏
  • 举报
回复
我用过:
obj=eval('document.cb_cart.text_unitprice_' + $shipping_charge_cnt);

jquery也用过,jquery ui:
inlineSettings[attrName] = eval(attrValue);
maqiang19890723 2011-06-08
  • 打赏
  • 举报
回复
收获巨大!
笑是我的药 2011-06-08
  • 打赏
  • 举报
回复
我也觉得应该少用~~~
nana1216peng 2011-06-08
  • 打赏
  • 举报
回复
受益匪浅,谢谢楼主
krqw 2011-06-08
  • 打赏
  • 举报
回复
asp 用的多 ,也可以选择不用
加载更多回复(100)
Xiuno BBS简介 Xiuno BBS 是一款国产、小巧、稳定、支持在大数据量下仍然保持高负载能力的轻型论坛。它只有 21 个表,源代码压缩后 600k 左右,运行速度非常快,处理单次请求在 0.01 秒级别,在有 APC、XCache 的环境下可以跑到 0.00x 秒,对第三方类库依赖极少,仅仅前端依赖 jquery.js/zepto.js,作者认为它就像一辆纯手工打造的法拉利,动力强劲,没有一丝赘肉,方便部署和维护,是一个非常好的二次开发的基石。 Xiuno BBS功能 探索轻论坛在移动背景下的交互模式 1.赞。抛弃了传统论坛的,评分,精华,高亮等内容筛选功能,引入了“赞”的机制,帖子的好坏,用户组的升级、主题颜色等都与与“赞”紧密关联起来。 2. 全新编写的编辑器支持:表格、增删行列、HTML5 客户端图片缩略,降低服务端 CPU 运算压力、支持 QQ 截图直接粘贴。 3. 支持游客发帖、回帖、点赞。 4. 支持自定义 URL,有利于 SEO,网址可以像这样:http://bbs.xiuno.com/xiuno-bbs-3-official-upgrade 5. 支持 SMTP 邮件发送,邮件列表设置 6. 支持 IP 限制:限制每日 IP 发帖数,发邮件数,上传附件数 7. 手机版本 8. 更多不一一列出 PHP 框架:XiunoPHP 3.0 抛弃了 OO,采用函数式封装,有利于 HHVM 编译 / opcode 缓存,提前与 PHP7 契合做好准备,并且倡导以下原则: 1. 不要 include 变量 2. 不要采用 eval(), 正则表达式 e 修饰符 3. 不要采用 autoload 4. 不要采用 $$var 多重变量 5. 不要使用 PHP 高级特性 __call __set __get 等魔术方法 6. 尽量采用函数封装功能,通过前缀区分模块。 前端框架:XiunoUI 无图片的 UI 库,兼容到 IE8,参考了 BootStrap,简化了 class 命名,砍掉了鸡肋的响应式布局,点击查看真相 编辑器:XNEditor 它基于 zepto.js,兼容 jquery.js,只有 82k,但是实现了标准浏览器下的编辑器常见功能:加粗、斜体、颜色、字体、字号、表格、图片上传、文件上传、客户端缩略、全屏,HTML 切换、上一步下一步等功能。 因为他不用考虑IE678,所以可以实现的非常优美,短小。写过编辑器的同学应该知道,编辑器最大的一个坑就是 IE 的 Range 跟 w3c 定义的 Range 的巨大鸿沟。如果不考虑 IE,代码可以精简很多。 Xiuno BBS v4.0.2 正式版 更新日志 Xiuno BBS 4.0 采用 Bootstrap 4 JQuery 3 作为前端类库,全面支持移动端浏览器;后端 XiunoPHP 4.0 支持了 NoSQL 的方式操作各种数据库,这个版本是一个巨大的飞跃。 Xiuno BBS 4.0 采用 MIT 协议发布,您可以自由修改、派生版本、商用而不用担心任何法律风险(修改后应保留原来文件的版权信息)。 Xiuno BBS前台页面  Xiuno BBS后台管理 后台路径:域名/admin 用户名与密码:admin(安装时可设置) 后台页面 相关阅读 同类推荐:站长常用源码
mfexe BBS 是一款国产、小巧、稳定、支持在大数据量下仍然保持高负载能力的轻型论坛。它只有 20 多个表,源代码压缩后 720k 左右,运行速度非常快,处理单次请求在 0.01 秒级别,在有 APC、XCache 的环境下可以跑到 0.00x 秒,对第三方类库依赖极少,仅仅前端依赖 jquery.js/zepto.js,作者认为它就像一辆纯手工打造的法拉利,动力强劲,没有一丝赘肉,方便部署和维护,是一个非常好的二次开发的基石。 【功能方面】 抛弃了传统论坛的,评分,精华,高亮等内容筛选功能,引入了“赞”的机制,帖子的好坏,用户组的升级、主题颜色等都与与“赞”紧密关联起来。 全新编写的编辑器支持:表格、增删行列、HTML5 客户端图片缩略,降低服务端 CPU 运算压力、支持 QQ 截图直接粘贴。 支持游客发帖、回帖、点赞。 支持自定义 URL,有利于 SEO, 支持 SMTP 邮件发送 支持 IP 限制:限制每日 IP 发帖数,发邮件数,上传附件数 【性能方面】 这是mfexe 的强项,作者自 2002 年开始接触 web 开发,一直在一线笔耕不缀,对于 web 中可能影响性能的环节了如指掌(有点像吹牛,其实是个傻子十几年下来也都知道了)。 mfexe BBS 到底有多强悍?很多人关注这个问题,以下数据可以作为参考: 帖子数:1200w+, 用户 122w+,平均日PV 100w+(峰值远远超出这个),运行速度 0.01s,loadavg < 0.3 示例站点:http://www.5qwan.net 【衍生产品】 为了造福我朝程序猿,作者将框架独立出来了,便于二次开发和整合到其他项目中,并且保留全部中文注释。 【mfexePHP 3.0】 mfexephp 3.0,采用简单结构,有利于 HHVM 编译 / opcode 缓存,提前与 PHP7 契合做好准备,并且倡导以下原则: 1. 不要 include 变量 2. 不要采用 eval(), 正则表达式 e 修饰符 3. 不要采用 autoload 4. 不要采用 $$var 多重变量 5. 不要使用 PHP 高级特性 __call __set __get 等魔术方法 6. 尽量采用函数封装功能,通过前缀区分模块。 【mfexeUI】 独立的前端框架,最低标准支持 IE8,预览地址:http://www.5qwan.net/ 作者曾经用过一段时间的 bootstrap,发现命名比较冗余,标签嵌套也比较深,所谓的响应式、流式布局坑也蛮多(主要是后期维护麻烦) 在设计的领域,对于画布的大小,宽高留白是非常有讲究的,想一套代码适应不同尺寸的设备只是程序猿的乌托邦梦想。老老实实开发独立的手机版吧,否则后期的维护是个灾难,跟设计人员沟通也会让人崩溃。所以作者砍掉了里面的流式布局,并且简化了 class 名称、降低了代码嵌套深度。 【XNEditor】 它基于 zepto.js,兼容 jquery.js,只有 82k,但是实现了标准浏览器下的编辑器常见功能:加粗、斜体、颜色、字体、字号、表格、图片上传、文件上传、客户端缩略、全屏,HTML 切换、上一步下一步等功能。 因为他不用考虑IE678,所以可以实现的非常优美,短小。写过编辑器的同学应该知道,编辑器最大的一个坑就是 IE 的 Range 跟 w3c 定义的 Range 的巨大鸿沟。如果不考虑 IE,代码可以精简很多。 在我所了解到的编辑器中,兼容性最好的是百度编辑器,它依赖 jquery,又对常见的 DOM 操作进行了封装,为了兼容 IE,对 Range 也做了封装。加上代码高亮插件、脏代码过滤、Office 过滤、多语言等等,导致代码非常的复杂,牵一发而动全身,阅读的工作量要远远大于重构。 另外绝大部分其他编辑器在无刷新的情况下,会导致内存疯长,应该 DOM 节点或者闭包导致的内存泄露。

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧