eval()函数在JavaScript中已经存在很长一段时间了!您可能不再经常看到它,因为人们普遍认为它是有害的。
关键字eval
是评估
的缩写,该函数基本上采用了JavaScript代码的字符串,并将为您评估。
1eval('2 + 3 + 1');
2// 6
您可以评估一个简单的表达式......或一堆JavaScript代码!
1var foo = 2;
2
3eval('var bar = 3;\
4var baz = 1;\
5\
6function addStuff() {\
7 return foo + bar + baz;\
8}\
9\
10addStuff();\
11');
12// 6
避免使用eval()
的原因
除非你做的是非常高水平的JavaScript(见下文),否则风险通常会超过使用eval()的好处。
- 恶意代码:召唤
eval
可以破坏计算机,例如:如果您使用eval
服务器侧,而一个错误的用户决定将infinite loop
(https://stackoverflow.com/questions/24977456/how-do-i-create-an-infinite-loop-in-javascript)作为其用户名 - 非常慢:JavaScript语言旨在使用整个JavaScript类型(数字,函数,对象等)... 不仅仅是字符串!使用
eval
是比正常JavaScript代码更慢的序列
考虑到eval() 仍然是 ECMAScript 标准的一部分,它是否有任何适当的用途?
使用eval()
的合法用途
有一个小部分的JavaScript开发,需要使用eval
。这些包括:开发模板库,解释器,命令行和模块系统。
如果您不确定是否使用eval
,请尝试在 StackOverflow上快速搜索。