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'