eval 和 new Function

new Function
语法:新函数 = new Function(参数1, 参数2, ..., 参数n, 函数体);
除最后一个参数外,其他所有的参数都是新创建函数的参数。
        最后一个参数是,新创建函数的函数体。

所有的参数都可以省略。

       举例:

var f = new Function("x", "y", "console.log(x + y);");
f(10, 9);
function f(x, y) {
console.log(x + y);
}
如果只有一个参数,那么这个参数就是函数体。
var f = new Function("console.log('这是函数的函数体')");
Function 和 eval 联系:
new Function() 的作用就是:创建函数
        特点:将字符串当成代码来执行
         eval 计算、评估、计算...的值
基本语法: eval(字符串);
作用:就是将字符串当成是代码来执行
var a = 123;
eval("var a = 123;");
console.log(a);
Function 和 eval 的区别:
new Function 是要创建一个函数,只不过,将参数或者是函数体使用字符串来代替
eval 不用创建函数 直接执行代码 
效率:eval效率更高
安全:new Function 更加安全
eval 和 new Function:
应用:将 JSON 数据转化为对象使用
JSON格式:属性必须使用双引号
var str = '{ "name":"jim", "age": 18, "gender": "男" }';
console.log(str.name);
转化:对象字面量
以下两种方式都可以:
方式一:
 var obj = eval(str);  有问题
var obj = eval("(" + str + ")");
方式二:
eval("var obj = " + str);
console.log(obj);
var obj = {
name: "jim",
age: 18,
gender: "男"

};


var obj = eval(str);  有问题
报错的原因:
如果按照以下的写法,JS引擎(解析器)就会把这块内容当作代码块,
不会当成是对象字面量。
eval('{ "name":"jim", "age": 18, "gender": "男" }');
此处报错的原因:语法错误
{"name":"jim", "age": 18, "gender": "男"}  
eval("var a = 1");
var a = 1;
eval("var obj = " + str);
如果是放在 = 后面,此时 = 后面的内容要求必须是一个 表达式。
如果是一个表达式,此时 {} 会被解析为:对象字面量。
var obj = {"name":"jim", "age": 18, "gender": "男"};
var str = '{ "name":"jim", "age": 18, "gender": "男" }';
此处,小括号的作用就是:将 {} 转化为 对象字面量 来解析
eval("(" + str + ")");


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值