javascript中的Eval函数与实例

388 阅读3分钟

在这篇博文中,我们将通过实例来学习javascript eval函数。

评价函数

eval 是一个在javascript中预定义的全局函数。

它以Javascript代码的形式执行字符串。它接收输入的字符串,并返回输出的Javascript表达式代码字符串。代码可以是变量、对象,以及javascript用这个函数执行的对象。

这个函数可以在javascript和Typescript中使用,因为Typescript是javascript编程语言的一个超集。

语法

eval(code)  

参数代码:是一个带有单个/多个语句的javascript表达式。这些表达式用单引号括起来。它将表达式作为一个javascript语句来执行。

例如,如果代码中包含语句算术表达式,它就会评估艺术表达式。

注意:

  • Javascript是客户端的,从chrome调试器中传递恶意代码使得它不容易受到安全问题的影响。
  • 现代的javascript解释器转换为机器码,用户输入的内容包含了所传递的变量,eval将迫使浏览器找出机器码上存在的变量,并进行昂贵的操作。
  • 如果你把用户输入的信息传递给eval函数,那就没有危险了。
  • 如果用户通过从客户端注入的恶意代码,攻击者有可能窃取信息,因此不建议使用。

下面是使用eval()函数的不同例子。

在javascript中评估算术表达式

这是一个简单的算术表达式代码,我们可以把它传递给eval 函数。

它在运行时作为javascript代码evaluates the expression ,并返回输出。

var temp = 6;  
console.log(eval('temp + 51')) // output is 57  
var temp = 5;  
alert( eval('(x + 4) - 2')); // output is 7  

如何使用eval动态地创建和调用一个函数

在此,创建一个javascript函数并使用eval表达式进行调用。

下面的代码动态地创建了doubleFunction 函数。

创建的函数声明代码包含在一个字符串中。而代表函数的字符串则使用eval函数来调用。最后,将这个动态函数调用为普通函数。

var strDoubleFunction = "function doubleFunction(parameter) { return parameter* parameter; }";  
eval(strDoubleFunction);  
console.log(doubleFunction(5)); // 25  
console.log(doubleFunction(4)); // 16  

如何使用eval来声明变量字符串?

在这个例子中,我们可以动态地声明多个javascript语句
这里,通过eval使用了变量,变量像javascript代码一样存在。

下面是一个代码javascript statements eval example

var strStatements = "var t1=20;var t2=30;";  
eval(strStatements);  
console.log(t1); // 20  
console.log(t2); // 30  

如何使用eval函数将字符串转换为JSON?

如果eval 函数包含一个JSON数据的字符串。

var strJson = '({"id":"1","name":"cloudhadoop"})';  
var jsonObj = eval(strJson);  
console.log(jsonObj.id)// 1   
console.log(jsonObj.name)// cloudhadoop 

然而,最好是使用JSON.parse() 函数将字符串转换为JSOn。

带有本地上下文和全局上下文的评价

默认情况下,如果没有一个窗口对象,它将创建一个本地上下文。在本地上下文中,它将只在本地范围内创建变量和对象。

对于使用全局范围,你可以使用一个带有eval函数的窗口对象,如window.eval()
eval函数是邪恶和危险的
eval 在浏览器中以字符串的形式评估javascript代码。请始终小心使用这个函数,因为它将导致无效的代码被注入其中,是不安全的。

这种代码的性能非常低,而且不可读。