你需要深入了解一下 JavaScript 的 new Function

1、需深下语法
语法如下:
let func = new Function ([arg1,入解 arg2, …argN], functionBody);最后一个参数必须是函数体,其余参数作为传递给函数体的需深下参数。
例如:
let sum = new Function(a,入解 b, return a + b);
console.log(sum(1, 2)); // the result is 3我们平时开发 JavaScript 或者 Node.js 的时候,没有理由使用 new Function 构造函数,需深下因为不需要直接使用函数或者 () => {} 箭头函数。入解
这是需深下否意味着 new Function 语法是一个鸡肋的功能?
千万不要这样想! 因为它绝对不是入解你想的那样!
new Function 语法有一个特别强大的需深下特性,使它在 JavaScript 中发挥着不可替代的入解作用。
有什么特点?需深下也就是函数体的数据格式是字符串,真是入解不可思议!
不可替代的需深下角色
这里有几个例子来展示 new Function 语法的微妙之处。
1).无效的入解 JSON 对象字符串合法化
例如,有以下字符串:
let str = `{ "id": 103,需深下 name: yh, date: 2022–07–06 }`;其中的字符串不符合JSON格式(键值需要双引号),使用JSON.parse()解析会报错。源码下载
那么,有没有什么办法可以把这个字符串对象转换成可以解析的JSON呢?
很多人会想到正则匹配然后替换,或者使用eval等渣属性进行处理。
没必要这么麻烦, new Function 上线了,就完美了!
JS 代码如下所示:
console.log(JSON.stringify(new Function(return + str)()));
// The return result is: {"id":10393,"name":"yh","date":"2022–07–06"}使用返回语法,你可以轻松地将任意字符串转换为其他 JavaScript数据类型。
2).模板字符串作为模板
比如Vue、React等现在都有自己的模板语法,比如{}语法。
如果我们想直接使用 ES6 自己的语法作为模板语言,就必须使用 new Function 的能力,比如下面的 HTML:
${data.map(function (obj, index) {
return `
Article: ${obj.article}
Author: ${obj.author}
`;
}).join()}
</template>我们可以扩展字符串并定义一个名为 interpolate 的字符串方法来将 ES6 语法字符串转换为可执行的 ES6 代码:
String.prototype.interpolate = function (params) {
const names = Object.keys(params);
const vals = Object.values(params);return new Function(…names,`return \`${this}\`;`)(…vals);
};至此,只要有对应的数据,我们就可以根据<template>模板获取最终编译好的HTML字符串,例如:
const html = template.innerHTML.interpolate({
data: [{
article: Article title one,
author: y
}, {
article: Article title two,
author: h
}]
});
console.log(html);可以看出,无需任何第三方模板渲染引擎,就能使用复杂语法下的模板渲染效果,原生JS爱好者欣喜若狂。
3).闭包和上下文
new Function 的 body 参数中变量的上下文是b2b信息网全局的,不是私有的,没有所谓的闭包。
例如,下面新函数代码中的值与主函数中的值无关:
function getFunc() {
let value = yh;
let func = new Function(console.log(value));
return func;
}
getFunc()(); // error: value is not defined如果是常规函数语法,没有问题:
function getFunc() {
let value = yh;
let func = function () {
console.log(value)
};
return func;
}
getFunc()(); // print yh4).其他
与 new Function 语法类似的是新的RegExp,它可以使用字符串作为正则表达式的内容,特别适合动态匹配,或者增加代码混淆(一些混淆工具可以对字符串进行混淆)。
例如,要匹配以动态值开头的属性值,可以使用以下用法:
let reg = new RegExp(^ + value, g);总结
以上就是我今天跟你分享的关于new Function语法的知识,希望对你有所帮助,如果你觉得有用的话,请记得点赞我,关注我,并将其分享给你身边的站群服务器朋友,也许能够帮助到他。
最后,感谢你的阅读,期待你的关注,我们一起快乐学编程。
相关文章
硬盘Ghost分区教程(使用Ghost软件实现硬盘分区备份与还原,保障数据安全与稳定性)
摘要:在现代社会中,我们越来越依赖计算机和硬盘存储设备。然而,硬盘中存储的数据可能会因为误操作、病毒攻击或硬件故障而丢失。为了防范风险,我们需要经常对硬盘进行备份,并能够快速恢复数据。本...2025-11-05戴尔灵越4748s的性能和功能特点(探索戴尔灵越4748s的高性能和多功能设计)
摘要:作为一款备受瞩目的笔记本电脑,戴尔灵越4748s以其出色的性能和丰富的功能特点,受到了众多用户的喜爱和追捧。本文将详细探讨戴尔灵越4748s的各项特点和功能,为读者提供全面的了解。...2025-11-05AOC电脑CPU超频设置教程(一步步教你如何为AOC电脑的CPU进行超频)
摘要:随着电脑性能的要求越来越高,超频已经成为了很多电脑爱好者的选择之一。在AOC电脑上进行CPU超频可以提升计算性能,让你的电脑更加出色。本文将为你介绍如何为AOC电脑的CPU进行超频...2025-11-05服装电脑改版自学教程大全(从零开始学习服装电脑改版,轻松掌握设计技能)
摘要:随着时代的发展,服装行业越来越注重数字化设计和改版,对于想要从事服装设计或者提升设计技能的人来说,学习服装电脑改版是必不可少的一项技能。本文将为大家提供一份全面的自学教程大全,帮助...2025-11-05免费的电脑视频剪辑软件推荐(享受高质量视频剪辑体验,尽在免费软件中)
摘要:随着视频内容的日益普及,越来越多的人开始关注视频剪辑软件。然而,一些专业的剪辑软件价格昂贵,不是所有人都愿意为之付费。所幸,市场上也存在许多免费的电脑视频剪辑软件,它们能够提供相当...2025-11-05电脑公安系统安装教程(全面指南,轻松搭建高效安全的电脑公安系统)
摘要:随着互联网的迅速发展,网络安全问题变得日益严重。为了保护个人隐私和企业信息安全,搭建一套稳定高效的电脑公安系统变得尤为重要。本文将为您详细介绍如何安装电脑公安系统,并提供一些实用的...2025-11-05

最新评论