new Function
语法:新函数 = new Function(参数1, 参数2, ..., 参数n, 函数体);
除最后一个参数外,其他所有的参数都是新创建函数的参数。
最后一个参数是,新创建函数的函数体。
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: "男"
报错的原因:
如果按照以下的写法,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 + ")");
语法:新函数 = 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: "男"
};
报错的原因:
如果按照以下的写法,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 + ")");