在这篇博文中,我们将通过实例来学习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代码。请始终小心使用这个函数,因为它将导致无效的代码被注入其中,是不安全的。
这种代码的性能非常低,而且不可读。