此链接显示jQuery (new Function("return " + data))();
用于较旧的浏览器,而不是解析JSON字符串eval()
。
这有什么好处?如果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
变量完全优化为return 1
。一种用途eval
和许多潜在的优化措施将不可行。
当然在实践中,对于像JSONer这样的小功能eval
,不会有明显的区别,但是总的来说,思路是:
new Function
最好使用,而eval
不是。问题内容: 快速提问。JavaScript中的Eval是不安全的吗?我有一个JSON对象作为字符串,我需要将其转换为实际对象,以便获取数据: 如果有帮助,我正在使用jQuery的$ .ajax方法。 谢谢 问题答案: 好吧,不管是否安全,当您使用jQuery时,最好使用$ .getJSON() 方法,而不是$ .ajax(): 当您仅与自己的服务器通信时,通常被认为是安全的JSON解析,尤其是当您
问题内容: 据我所知,由于安全性,在JavaScript中使用JSON对象被认为是不好的做法。如果JSON来自其他服务器,我可以理解此问题。 但是,如果JSON是由我自己的服务器提供的,并且是使用PHP创建的(我们假设它不是越野车),那么简单地使用JS中的JSON读取是否合法,或者我目前无法想到任何安全问题? ? 我真的不想处理动态加载JSON解析器的问题,因此很高兴使用。 PS:很明显,我将使用
In some cases, we might want to return data from a new screen. For example, say we push a new screen that presents two options to a user. When the user taps on an option, we’ll want to inform our firs
In some cases, we might want to return data from a new screen. For example, say we push a new screen that presents two options to a user. When the user taps on an option, we’ll want to inform our firs
本文向大家介绍bootstrap data与jquery .data,包括了bootstrap data与jquery .data的使用技巧和注意事项,需要的朋友参考一下 jquery官网对.data函数描述是:在匹配元素上存储任意相关数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。 存储键值(key/value): 取键值 以上这些都很容易掌握和理解,今天在看bo
eval 函数会在当前作用域中执行一段 JavaScript 代码字符串。 var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。 var fo