javascript使用eval或者newFunction进行语法检查
JavaScript 使用 进行 语法 检查 或者 eval newFunction
2023-06-13 09:14:24 时间
使用newFunction()来进行语法检查
eval()方法是不能乱用的,在不适当的时候使用eval()方法可能导致整个程序都会出问题的;
而newFunction()就没这么大问题。虽然newFunction()在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数。
在eval()接受的参数前面增加“0,”
其实这是由于IE中存在一个bug。出于某种原因,如果你在IE中想通过调用eval()来动态地构造一个函数。
例如:
eval("(function(){/*codehere*/})");
在IE中得到的返回将是undefined,而其它浏览器则会正确地返回这个新构造的函数的引用。
最简单有效的解决办法是:在前边加上“0,”,这样就能在所有主流浏览器中兼容。
例如:
eval("0,function(){/*codehere*/}");
注:在IE9的Chakra引擎中,这个问题已经解决。
使用数组对象的concat方法来产生新数组
把单个对象参数转化为只包含一个元素的数组再来处理,可以使用“[].concat(o)”的形式。
例如:
复制代码代码如下:
eval()方法是不能乱用的,在不适当的时候使用eval()方法可能导致整个程序都会出问题的;
而newFunction()就没这么大问题。虽然newFunction()在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数。
在eval()接受的参数前面增加“0,”
其实这是由于IE中存在一个bug。出于某种原因,如果你在IE中想通过调用eval()来动态地构造一个函数。
例如:
eval("(function(){/*codehere*/})");
在IE中得到的返回将是undefined,而其它浏览器则会正确地返回这个新构造的函数的引用。
最简单有效的解决办法是:在前边加上“0,”,这样就能在所有主流浏览器中兼容。
例如:
eval("0,function(){/*codehere*/}");
注:在IE9的Chakra引擎中,这个问题已经解决。
使用数组对象的concat方法来产生新数组
把单个对象参数转化为只包含一个元素的数组再来处理,可以使用“[].concat(o)”的形式。
例如:
vararr1=[1,2];
vararr2=[3,4];
vararr3=arr1.concat(arr2);
alert(arr3.length);
另一种方式是:if(!(oinstanceofArray))o=[o];
//和ECMAScript5中的isArray相比不够严谨。
网友回复:
1.eval确实不能乱用;
2.在IEeval的时候,我的解决方法是在执行函数体内return;
3.Array.prototype.concat.apply([1,2,3],[4,5,6]);
相关文章
- javascript 使用btoa和atob来进行Base64转码和解码
- JavaScript进阶内容——jQuery
- 使用 Html、CSS 和 Javascript 的简单模拟时钟
- javaScript中confirm,alert,prompt函数使用区别分析详解编程语言
- JavaScript中的Window(浏览器对象)使用详解编程语言
- 使用 JavaScript 调用 Linux 命令的实现方法(js调用linux命令)
- 使用Mongodb运行JavaScript脚本(mongodb执行js)
- JavaScript使用prototype定义对象类型
- JavaScript中this关键字使用方法详解
- javascript数组使用调用方法汇总
- JavaScript在线压缩和格式化收藏
- 正确使用带有"g"标记的javascript正则表达式
- JavaScript拾碎[三]使用className属性
- javascript的内存管理详解
- 使用Rhino让java执行javascript的方法实例
- JavaScript中使用ActiveXObject操作本地文件夹的方法
- JavaScript前端图片加载管理器imagepool使用详解
- JavaScript中伪协议javascript:使用探讨
- javascript获取浏览器版本
- 使用JavaScript进行进制转换将字符串转换为十进制