JavaScript 拾碎[五] 使用eval 或者new Function 进行语法检查

 

使用代码来实现分析代码的语法,这是一件极其痛苦的事情。

简单的解决办法是:使用脚本引擎自己的语法检查,比方说eval( ) 或者new Function( )。

 

使用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]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值