Javascript之eval与new Function的差异
来源:互联网 发布:java ssh框架面试题 编辑:程序博客网 时间:2024/05/22 10:34
当你必须要将字符串当做代码来执行,很多人第一印象是想到使用eval, 但实际上,使用new Function会更安全 。
为什么安全? 看个例子。
<script> var a = 1; eval("var a=2;"); //改变了当前域的变量a alert(a); new Function("var a=3;")(); //不改变当前作用域的变量 alert(a);</script>
eval能够影响当前作用域及所有的父作用域的变量, 而new Function 它是运行在一个独立的function内, 并且他的父作用域是window而不是当前作用域。 我们再来看个例子。
<script> var a = 1, a1 = 1; function t(){ var b = 1, b1 = 1; !function(){ //立即执行函数 eval("a=2;b=2;"); alert(a); alert(b); new Function("a1=2;b1=2;")(); alert(a1); alert(b1); }(); } t();</script>
可能有人会说:new function 是隔离于当前作用域的。 那我如何获取到 字符串当做代码运行之后的值呢 ? 比如一个经典的应用,将json字符串 转化为 对象字面量
如 var b = '{"a":"b"}' 你可以直接加个return, 如 var c = new Function("return "+b)(); 这样c就是一个相同格式的对象了。
0 0
- Javascript之eval与new Function的差异
- eval与new Function()之比较
- eval 和 new Function
- 理解javascript中的function与new Function的区别
- JavaScript之eval、Function、setTimeOut、setInterval
- JavaScript的 new function () {} 写法
- javascript 之 function 与 Function
- eval与Function
- Function 与 new Function 的区别
- JavaScript之Function的apply与call
- 特性(Feature)与功能(Function)的差异
- Lua与javascript的差异
- malloc与new差异
- 关于javascript的函数function,new function和new Function的一些理解
- javascript中的new function
- js接收json总结 new Function,eval,new Array
- MySQL与Oracle 差异比较之五存储过程&Function
- MySQL与Oracle 差异比较之五存储过程&Function
- NGUI 减少drawcall
- JS获取当前时间并自动更新、Ajax对比
- Mybatis和Spring整合
- iphone(ios开发)之23种设计模式简介
- 获得农历时间
- Javascript之eval与new Function的差异
- SimpleApp例子中网络的形成过程
- 深入浅出Java Dom4j读取XML
- 实现 div 覆盖 div
- Cocos2d-x移植IOS笔记
- Datasets for Data Minging
- BYTE 和 COleVariant 相互转换
- leetcode之Letter Combinations of a Phone Number
- ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别