eval函数的作用

一、eval是什么?(解析器)

eval是一个函数,看本质function  eval() { [native code] }

 

二、怎样使用eval?

   语法:string 必需。要计算的字符串其中含有要计算的 JavaScript 表达式或要执行的语句。通过计算 string 得到的值(如果有的话)

    该方法只接受原始字符串作为参数,只接受一个参数

    如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。

     因此请不要为 eval() 函数传递 String 对象来作为参数。而应该是对象

    如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

     如果非法调用 eval(),则抛出 EvalError 异常。

    如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

第一个例子: console.log(eval("1212")); //输出结果为1212;

第二个例子:  var msg="hello worle";
                   eval("alert(msg)");//  输出:hello world 传入参数当做实际的ECMAScript语句来执行;

                   相当于:alert(msg);

第三个例子:eval定义一个函数;

                  eval("function sayHi(){alert('hello wold')}");

                 sayHi();           //输出的结果是hello world  (运行机制:在解析代码的时候,它们包含在一个字符串中,它们只在eval()执行的时候的创建)

三、eval(”(执行的内容)”);加上圆括号的目的是迫使eval函数在运行JavaScript代码的时候强制将括号内的表达式转化为对象,而不是作为语句(statement)来执行

例如对象字面量{},如若不加外层的括号,eval会将大括号识别为JavaScript代码块的开始和结束标记,

那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

eval('{}'); //undefined   JavaScript代码块的开始和结束标记  那么{}将会被认为是执行了一句空语句
console.log(eval('({})')); //object(){}  eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行

四、eval很强大,但是同样也有弊端

 (1)eval方法是在运行时对脚本进行解释执行,而普通的javascript会有一个预处理的过程。

  (2)eval通常用在一些需要动态执行字符串,或将字符串转为javascript对象的场景,比如将json字符串转为javascript对象。)

  (3)安全隐患

举简单例子:

eval函数是强大的数码转换引擎,字符串经eval转换后得到一个javascript对象,

var a = eval(“5″);等效于var a = 5;

var a = eval(“’5′”);等效于var a = ’5′;

var obj = eval(“({name:’cat’,color:’black’})”);等效于 var obj = {name:’cat’,color:’black’};

eval(“alert(‘hello world!’);”);等效于 alert(‘hello world!’);

js的数据类型为弱类型,可以在定义的时候指定数据类型,也可以在运算过程中强制数据类型转换

一个对象经过eval转换后数据类型不确定,在相加过程中自动与其他数据类型一致

eval应用实例,如下:

后台传给前台一个Json数据如

{“id”:1,”name”:”zhangsan”,”age”:30,”address”:”beijing”}

前台这样写

function(returnedData,status){
     
      var people = returnedData;
      alert(people);
      var id = people.id;
      var name = people.name;
      var age = people.age;
      var address = people.address;

}

如上这样写得话,取到的returnedData是一个字符串而不是一个对象,所以下面取不到对象的属性

如果将

var people = eval(“(“+returnedData+”)”);

即可将people转换成一个对象,也就取得对象的属性了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值