javascript eval()的注意事项

        Javascript是一门解释型语言,与其它同类型语言一样,他拥有功能强大的eval()函数。eval()能把字符串当作普通的javascript代码一样执行。它非常强大且易用,以至于被用在了许多不该使用的地方,让代码执行变慢以及难以维护。一般来讲,如果你使用了eval,你的设计上可能就有问题。


常见错误

这是一个典型的误用eval()的例子。你有一个名为foo的javascript对象,你要访问他的属性,但是只有在运行的时候才知道他的属性名。别像下面这样做。


var property = 'bar';
var value = eval('foo.' + property);


没错,他可以运行。但是每次在执行这段代码的时候,javascript都会返回到解释模式下,这会让你的程序变慢。这样的做法也相当的丑陋。
正确的做法应该像这样:


var property = 'bar';
var value = foo[property];



在javascript里,方括号可以像.运算符那样用作查找。唯一的不同是方括号里要用字符串。

安全问题

在所有的编程语言里,你对执行不受信任的代码都要引起高度的警惕。Javascript也是如此,你在使用eval()执行那此可能会被篡改的代码时要小心。比如,这段要执行的代码来自页面查询的字符串。执行这样的不受信任的代码将使你很容易受到跨站脚本攻击。

那它有什么好?

一些程序员说eval()是B.A.D(Broken As Designed),应该从javascript里去掉。可是,在一些场合下它可以显著地简化你的代码。一个例子就是与XMLHttpRequest配合使用。XMLHttpRequest让你可以在不刷新整个页面的情况下,在javascript里回调服务器。一个简单方法就是把服务器返回的javascript代码作为参数传给eval()。以下是一个简单的例子:使用XMLHttpRequest和eval()载入并解析javascript。

function evalRequest(url) {
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState==4 && xmlhttp.status==200) {
			eval(xmlhttp.responseText);
		}
	}
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
 }



原文链接:http://24ways.org/2005/dont-be-eval

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值