eval()函数

446 阅读1分钟

eval是一个全局函数,会把传入的字符串当作JS代码执行。如果传入的参数不是字符串,会把结果原封不动的返回。eval分为直接调用和间接调用,通常间接调用的性能要好于直接调用。

直接调用的时候,eval作用于当前作用域

var text = 'outside'; 
(function(){ 
   var text = 'inside'; 
   return eval('text');// 'inside' 
 })();

间接调用时,eval 运行于全局作用域

 var context = 'outside'; 
 (function(){ 
     var context = 'inside'; 
     geval = eval; return geval('context'); 
     // 下面两种也属于间接调用 
     // return eval.call(null, 'context'); 
     // return (1, eval)('context'); 
 })(); 
   //'outside' 

eval会去掉传入的字符串的引号,并按照Python语句方式执行去掉引号后的字符内容。

1. 数组字符串,需要加小括号

let str="[{keshi:'外科'},{page:'剩余12'}]" 
let ary=eval('('+str+')') 
console.log(ary)==> [ {keshi:'外科'}, {page:'剩余12'} ] 

2. 对象字符串,需要加小括号

let str="{'aa':12,'bb':123}" 
let ary=eval('('+str+')') 
console.log(obj)==>{aa: 12, bb: 123} 

3.数字字符串,eval之后是数字

let str="123456" 
let num=eval(str) 
console.log(num)==>123456
console.log(typeof num)===>number

4.带字母的字符串,需要加引号

let str="aaa123456" 
let strr=eval(str) 
console.log(strr)===> 报错:aaa123456 is not defined at eval 
let strrr=eval('str') 
console.log(strrr)===>'aaa123456'