javascript使用eval或者new Function进行语法检查


Posted in Javascript onOctober 16, 2010

使用new Function( ) 来进行语法检查
eval( ) 方法是不能乱用的,在不适当的时候使用eval( ) 方法可能导致整个程序都会出问题的;
而new Function( ) 就没这么大问题。虽然new Function( ) 在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数。

在eval( ) 接受的参数前面增加“0,”
其实这是由于IE中存在一个bug。出于某种原因,如果你在IE 中想通过调用eval( ) 来动态地构造一个函数。
例如:
eval('(function(){ /* code here */ })');
在IE 中得到的返回将是undefined,而其它浏览器则会正确地返回这个新构造的函数的引用。
最简单有效的解决办法是:在前边加上“0,”,这样就能在所有主流浏览器中兼容。
例如:
eval('0,function(){ /* code here */ }');
注:在IE9 的Chakra 引擎中,这个问题已经解决。

使用数组对象的concat方法来产生新数组
把单个对象参数转化为只包含一个元素的数组再来处理,可以使用“[ ].concat(o)”的形式。
例如:

var arr1 = [1,2]; 
var arr2 = [3,4]; 
var arr3 = arr1.concat(arr2); 
alert(arr3.length);

另一种方式是:if (!(o instanceof Array)) o = [o];
// 和ECMAScript 5 中的isArray 相比不够严谨。

网友回复:
1.eval 确实不能乱用;
2.在IE eval 的时候,我的解决方法是在执行函数体内return ;
3.Array.prototype.concat.apply([1,2,3],[4,5,6]);

Javascript 相关文章推荐
jquery选择器之基本过滤选择器详解
Jan 27 Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
利用Javascript实现简单的转盘抽奖
Feb 13 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 Javascript
自己整理的一个javascript日期处理函数
Oct 16 #Javascript
理解Javascript_10_对象模型
Oct 16 #Javascript
理解Javascript_09_Function与Object
Oct 16 #Javascript
理解Javascript_08_函数对象
Oct 15 #Javascript
javascript instanceof 内部机制探析
Oct 15 #Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 #Javascript
JavaScript 对象模型 执行模型
Oct 15 #Javascript
You might like
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
php防止sql注入的方法详解
2017/02/20 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
原生js轮播特效
2017/05/18 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Django celery异步任务实现代码示例
2020/11/26 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
护理个人求职信范文
2014/01/08 职场文书
新任教师自我鉴定
2014/02/24 职场文书
学校三节实施方案
2014/06/09 职场文书
给上级领导的感谢信
2015/01/22 职场文书
公积金贷款承诺书
2015/04/30 职场文书
国庆节主题班会
2015/08/15 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server