在本文中,我们将探讨一些最令人兴奋和最受期待的 JavaScript 功能,这些功能预计将在2024 年推出。
各位朋友好,我们来描述2024年在JavaScript中让人兴奋的5个特性。其中,以下提案很有可能进入今年的 ECMAScript 版本:
ES的新版本总是会引起开发者和业界的振奋。自从 ES6 更新以来,每年都会有新版本,我们预计今年(ES2 024)将在 6 月初左右发布。
ES6 将是本年度的一个大规模发布版本,是在其前身 ES 5发布后6年后发布的
而浏览器提供商和 JavaScript 开发者对大量需要采用和学习新特性感到不知所措。从那时起,为了防止新功能同时出现,导致过多的状态变化,每年都有一个发布周期。
每个年度发布周期涉及提出任何新功能,都会经由技术委员会讨论、评估和投票,然后再将其添加到语言特性中。此过程还允许浏览器在提案正式添加到语言之前尝试实现这些提案,这会帮助人们解决现实的问题。
如前所述,JavaScript(或 ECMAScript)的新功能由技术委员会 39 (TC39)决定。TC39 由来自所有主流浏览器供应商的代表以及 JavaScript 技术专家组成。他们定期开会讨论该语言的新功能以及如何实现这些功能。新功能以提案形式提出(可以由任何人提出),然后委员会成员投票决定每个提案是否可以进入下一阶段。
每个提案有 4 个阶段;一旦提案达到第 4 阶段,预计该功能将被包含在下一版本的 ES 中。
ES 规范的一个重要部分是它必须向后兼容。这意味着任何新功能都不能通过改变 ES 之前版本的工作方式来破坏互联网。因此,他们无法改变现有方法的工作方式,只能添加新方法,因为任何使用可能预先存在的方法运行的网站都将面临崩溃的风险。
ES 规范的一个重要部分是它必须向后兼容。这意味着任何新功能都不能通过改变 ES 之前版本的工作方式来破坏Web应用。因此,他们无法改变现有方法的工作方式,只能添加新方法,因为任何使用可能预先存在的方法运行的网站都将面临崩溃的风险。
在《2022 年 JavaScript 现状》调查中,第三个最常见的答案是“你认为 JavaScript 目前缺少什么?” 是更好的日期管理。
这引发了Temporal 提案的产生,它提供了一个标准的全局对象来替换该Date对象,并修复了多年来在 JavaScript 中处理日期时给开发者带来很大痛苦的一些问题。
在 JavaScript 中处理日期几乎总是一项可怕的任务;必须处理微小但令人恼火的不一致,例如月份索引为零,实际上月份中的日期是从 1 开始的。
日期的使用困难,导致流行的外部库如Moment、Day.JS和date-fns出现,它们都试图解决这些问题。
Temporal将支持多个时与开箱即用的非公历特性,并将提供一个简单易用的 API,使使字符串解析日期变得更加容易。此外,所有Temporal对象都是不可变的,这将有助于避免任何意外的日期更改错误。
这这个方法将创建一个 DateTime 对象,表示今年晚些时候巴黎奥运会将于 2024 年 7 月 26 日 20:24(UTC)开始。
作为 PlainDate()的补充,我们可以使用这个新函数来创建一个没有日期的时间,使用.PlainTime()示例如下:
PlainMonthDay() 类似PlainDate,但它只返回月份和日期,没有年份信息(对于每年在同一天重复出现的日期非常有用,例如圣诞节和情人节等):
同样,还有PlainYearMonth只返回年份和月份(对于表示一年中的整个月份很有用):
可以使用 Temporal 对象完成许多计算。我们可以向日期对象添加和减去各种时间单位:
与until方法配合,since可让你了解距某个特定日期或自该日期发生以来的时间。例如,以下代码将告诉你距离巴黎奥运会还有多少天:
这些方法会返回一个Temporal.Duration对象,该对象可用于测量具有多种不同单位和舍入选项的时间量。
我们可以从 Date 对象中提取年、月、日,并从 Time 对象中提取时、分、秒、毫秒、微秒和纳秒(微秒和纳秒在当前 DateTime 对象中不可用)。
Temporal日期对象还有一个compare方法,可用于使用各种排序算法对日期进行排序。
Temporal 目前是在第 3 阶段提案,浏览器提供商正在实施该提案,因此似乎它的时机“已经到来”。
与Intl.DateTimeFormat API配合使用时,你将能够执行一些非常漂亮的日期操作。
在2023年 JavaScript 现状调查中,“你认为 JavaScript 目前缺少什么?”的第六个热门答案是管道操作符。
管道运算符是函数式语言中的一项标准功能,它允许你将值从一个函数“管道”到另一个函数,前一个函数的输出用作下一个函数的输入(类似于 Fetch API 传递它从一个承诺返回到下一个承诺的任何数据)。
但是,像这样深度嵌套多个函数调用可能会很快变得混乱,特别是因为text作为参数传递的值 ,括号( ) 最终深深嵌入到表达必博平台式中,使其非常难以识别。
函数嵌套的另一个问题是函数的应用顺序是从后到前的,即最里面的函数首先被应用。因此,在这种情况下,listengets 应用于原始值text,然后,最后将应用exclaim最外层函数。uppercase函数特别是对于大型且复杂的项目时,会变得很难看并且不甚直观。
这解决了嵌套函数的很多问题。传递的参数位于开头,每个函数按照其应用的顺序出现,因此listen()首先应用,执行exclaim()后再uppercase()。
不幸的是,这个例子不起作用,因为 listen和exclaim函数uppercase不是该类的方法String。它们可以通过修补类来添加String,但这作为一种技术通常并不受欢迎。
这意味着,虽然链接看起来比函数嵌套好得多,但它实际上只能与内置函数一起使用(就像数组方法经常使用的那样)。
管道结合了链接的易用性,并且能够将其与任何函数一起使用。根据当前的提案,上面的示例将如下所示:
%是一个占位符,用于表示前一个函数的输出值,尽管该%字符很可能在正式版本中被其它字符替换。这允许在管道中使用接受多个参数的函数。
管道结合了链接的便利性,但可以与你编写的任何自定义函数一起使用。唯一的条件是你需要确保一个函数的输出类型与链中下一个函数的输入类型匹配。
管道传输最适合只接受从任何先前函数的返回值,管道传输的单个参数的柯里化函数。它使函数式编程变得更加容易,因为小型的构建块函数可以链接在一起以形成更复杂的复合函数。它还使得部分应用更加容易实现。
尽管很受欢迎,但管道操作符一直在努力推进该过程的第二阶段。这是由于对如何表达符号的分歧以及对内存性能及其如何与await配合。
不过,ES委员会似乎正在慢慢达成某种协议,因此希望管道操作符能够迅速完成各个阶段,并在今年露面。
就我个人而言,我们希望管道运算符能够在今年实现并推出,因为它将真正有助于提高 JavaScript 作为一种严肃的函数式编程语言的资格。
元组类似于数组(值的有序列表),但是它们的深度是不可变的。这意味着元组中的每个值必须是原始值或另一个Record或元组(不是数组或对象,因为它们在 JavaScript 中是可变的)。
Record类似于对象(键值对的集合),但它们也是深度不可变的。它们的创建方式与对象类似,与元组基本相同,它们均以前导哈希开头:
下面的页面有一个带有现场游乐场的实用教程,因此,你可以习惯记录和元组的工作方式。
从版本 3 开始,正则表达式就被纳入 JavaScript 中,并且自那时以来已经有了许多改进(例如uES2015 中使用标志的 Unicode 支持)。
标志v 提案旨在完成u标志所做的所有事情,但它增加了一些额外的好处,我们将在下面的示例中看到。
该v标志还允许你在正则表达式中使用设置表示法。例如,你可以使用--运算符从一种模式中减去另一种模式。
你可以使用找到两个模式的交集&&。例如,以下代码将查找希腊符号和字母的交集:
该v标志还解决了该u标志不区分大小写的一些问题,使其成为在几乎所有情况下使用的更好选择。
正则表达式标志v在 2023 年已经达到了第 4 阶段,并已在所有主流浏览器中实现,因此它完全有望成为 ES2024 规范中的一部分。
装饰器在许多面向对象语言(例如 Python语言)中已经很常见,并且已经包含在 TypeScript 中。它们是标准的元编程抽象,允许你向函数或类添加额外的功能,而无需更改其结构。例如,你可能想向方法添加一些额外的验证,可以通过创建一个验证装饰器来检查输入到表单中的数据来完成此操作。
虽然 JavaScript 允许你使用函数来实现这种设计模式,但大多数面向对象的程序员更喜欢一种更简单、更原生的方式来实现这一点,只是为了让生活变得更轻松。
该提案添加了一些语法糖,使你可以轻松地在类中实现装饰器,而不必考虑绑定this到类。它提供了一种更简洁的方式来扩展类元素,例如类字必博平台段、类方法或类访问器,甚至可以应用于整个类。
装饰器通过符号的前缀进行标识@,并且始终紧邻放置在它们要“装饰”的代码之前。
例如,类装饰器将紧接在类定义之前。在下面的示例中,validation装饰器应用于整个类FormComponent:
类方法装饰器紧接在它所装饰的方法之前。在下面的示例中,validation装饰器应用于该submit方法:
value 参数指的是被修饰的值(例如类方法),上下文包含有关该值的元数据,例如它是否是函数、它的名称以及它是静态的还是私有的。你还可以将初始化函数添加到上下文中,该函数将在实例化类时运行。
Decorator 提案目前处于第 3 阶段,并已在 Babel 中实现,因此,各位开发者已经能够尝试这些新语法。
这些功能都将为 JavaScript 带来巨大的补充,所以让我们祈祷它们能在今年实现这一宏伟目标!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 进行投诉反馈,一经查实,立即处理!
在学习 JavaScript 过程中,数组的定义是学习的重难点之一。那么这篇文章中, 小编...
前端代码都是公开的,为了提高代码的破解成本、保证 JS 代码里的一些重要逻辑不被居心叵测的...
js replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达...
JavaScript 领域的 URL 验证前沿有新闻!经过这么多年咒骂 JavaScrip...
在本文中,我们将探讨一些最令人兴奋和最受期待的 JavaScript 功能,这些功能预计将在 202...
前端代码都是公开的,为了提高代码的破解成本、保证 JS 代码里的一些重要逻辑不被居心叵测的人利用,需...
在学习 JavaScript 过程中,数组的定义是学习的重难点之一。那么这篇文章中, 小编教你 Ja...
js replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子...
代码速度慢?避免这 19 种常见的 JavaScript 和 Node.js 错...
速度、性能和响应性在 Web 开发中起着至关重要的作用,尤其是在使用 JavaScript 和 No...
JavaScript 领域的 URL 验证前沿有新闻!经过这么多年咒骂 JavaScript 没有一...
在本文中,我们将探讨一些最令人兴奋和最受期待的 JavaScript 功能,这些功能预计将在 202...
在学习 JavaScript 过程中,数组的定义是学习的重难点之一。那么这篇文章中, 小编教你 Ja...
前端代码都是公开的,为了提高代码的破解成本、保证 JS 代码里的一些重要逻辑不被居心叵测的人利用,需...
js replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子...
JavaScript 领域的 URL 验证前沿有新闻!经过这么多年咒骂 JavaScript 没有一...
代码速度慢?避免这 19 种常见的 JavaScript 和 Node.js 错...
速度、性能和响应性在 Web 开发中起着至关重要的作用,尤其是在使用 JavaScript 和 No...