栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

jQuery使用(new Function(“ return” + data))(); 代替eval(data); 解析JSON,为什么呢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jQuery使用(new Function(“ return” + data))(); 代替eval(data); 解析JSON,为什么呢?

尼克答案中的引言暗示了这一点。并没有太大的区别,但是感觉是

eval
比还要“差”
new Function
。不是安全性方面的-
面对不受信任的输入,它们都同样无用,但是希望您的Web应用程序不会返回不受信任的JSON字符串-而是基于语言级别的怪异,从而阻止了优化。

特别:

function victim() {    var a= 1;    eval('a= 2');    return a;}

2
。该
eval
编辑字符串已在运行
victim
的局部变量的范围内!这是常规的用户编写函数永远无法完成的;
eval
只能这样做,因为它是黑魔法。

相反,使用常规函数可以消除此魔术元素:

function victim() {    var a= 1;    (new Function('a= 2;'))();    return a;}

在上面,返回的

a
遗骸
1
;新函数只能对自己的局部变量或全局变量进行操作
window.a

有了这些知识,代码分析工具(可能包括Javascript引擎,尤其是聪明的缩小器)可以进行更多优化。例如,第二个

victim
函数可以将
a
变量完全优化为
return1
。一种用途
eval
和许多潜在的优化措施将不可行。

当然在实践中,对于像JSONer这样的小功能

eval
,不会有明显的区别,但是总的来说,思路是:

  • 尽可能避免使用两种方法(ECMAscript Fifth Edition的严格模式均禁止使用这两种方法);
  • 除非您确实需要代码来访问调用函数的局部变量,否则
    new Function
    最好使用,而
    eval
    不是。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号