注意:
这本特定的电子书只是LearnReactui.dev网站上的几本免费电子书之一。有关PDF格式的其他免费电子书,请访问learnreactui.dev。
1开始
JS历史发展分为两个部分。
- 首先,有**浏览器时代,当时JavaScript试图在浏览器中存在。
- 第二: eS6,es7,es8,es9,es10,es11,es11,es12 eS12周期,当时JavaScript可以在带有node.js的浏览器和服务器和台式机上进行浏览器外操作。
1.1浏览器时代
Brenden Eich:是JavaScript编程语言的创建者。他于1995年在Netscape工作时开发了它,现在是Mozilla。随着时间的流逝,他的名字更改为 Mocha Livescript JavaScript 。
道格·克罗克福德(Doug Crockford): json(JavaScript对象表示法)于2002年创建。这种格式是XML的一个子集,是直接在语言中直接支持JavaScript并与该语言交互的基础服务器。
杰西·詹姆斯·加勒特(Jesse James Garrett):在2005年的论文中定义 ajax 。 Web应用程序的基础通信技术是与服务器的异步通信。
John Resig:在2006年,他创建了 jQuery 库。这些图书馆为开发人员提供了一个抽象,从而消除了所有浏览器不兼容性,如原型,Dojo和Mootools等库所普及。
html5:闪光灯即将结束。当史蒂夫·乔布斯(Steve Jobs)和马克·扎克伯格(Mark Zuckerberg)等技术开发人员表示,他们不会支持浏览器中的闪光设备,并且未来是HTML5,CSS3和JavaScript。
随着这种趋势的开始,所有在浏览器中工作的插件都消失了。 Java的Applet和Javafx,Adobe Flash和Microsoft Silverlight几乎消失了。
1.2。 ES周期(ES5,ES6,ES7,ES8,ES9,ES10,ES11,ES12)
nodejs 由Ryan Dahl于2009年创建。该基础架构是由叉车的JavaScript编译器构建的,它使JS可以作为服务器运行,即在浏览器之外。从那时起,JS开始到处奔跑。它开始到处出现,不再适合使其存在的浏览器,并且委员会开始无限期地增长。要求开始分歧。有了这种区别,该语言开始以进化的方式重新制作。
ecmascript(ES): JavaScript的基本标准。自从其作为基于浏览器的语言成立以来,该标准已将Flash的ActionScript和Microsoft的JScript合并。但是最终将其他语言的最佳功能纳入了JavaScript,它们消失了。
TC39: ES开发委员会由浏览器开发人员和大型网络相关公司的几个成员组成。
版本:每年,通常在6月,ES发布了新版本,每年都会通过将上一年的数字加倍来指定。例如,2015年宣布的语言功能称为ES6,2016年发布的语言功能称为ES7,2019年部署的语言功能称为ES10。 JS语言变化于2015年ES6截然不同,并且该语言是非常不同的。
我已经根据下面的eCmascript版本包含了JS语言中的发展;
1.2.1 ES6(2015)
- 让和const
- 箭头功能
- 班级
- 默认参数
- 模板文字
- 破坏作业
- 增强的对象文字
- 循环
- 承诺
- 传播操作员
- 设置/地图
- 发电机
1.2.2 ES7(2016)
- array.prototype.includes
- 指数操作员(**)
- array.prototype.find and array.prototype.findindex
- object.getownpropertydescriptor
1.3.3 ES8(2017)
- 字符串填充
- 对象(值,条目)
- 异步功能
- 共享记忆和原子
1.3.4 ES9(2018)
- 异步迭代
- 休息/传播
- Promise.Prototype.finally
- 正则表达改进
1.3.5 ES10(2019)
- 阵列(Flat,Flatmap)
- 对象(从entries)
- 可选捕获绑定
- 字符串(trimstart,trimend)
- 符号(描述)
- 稳定阵列(排序)
- 形成良好的JSON(Stringify)
- 静态字段
1.3.6。 ES11(2020)
- bigint
- 动态导入
- 无效合并
- 可选链接
- Promise.Allsettled
- 字符串#gateall
- Globalthis
- 模块名称空间导出
- 定义良好的订单
- import.meta
- 私人字段(#)
1.3.7 ES12(2021)
- 数字分离器
- string.prototype.replaceall
- Promise.any()和骨架
- 逻辑分配操作员
- 私人类方法和登录器
1.3.7 ES13(2022)
- 等待顶级运营商
- 类字段声明
- 私人方法和字段
- 静态类字段和私人静态方法
- REGEXP匹配指数
- 人体工程学品牌检查私人领域
- .AT()索引功能
- 时间功能
2. 2015年的JS语言改进(ES6)
2.1让,const
- 没有var全局范围
- var函数范围
- 让/const范围范围
VAR的目的是什么?
变量称为var。我们在这些变量中存储名称,消息,数字和日期,并在软件中对其进行操作。
因此,如果我们从未像下面提到的那样使用它会发生什么。首先,您不能定义年龄;独自的。 JS需要将其识别为作业,以便它可以运行。对于其他(名称,高度)JS将在全局范围中创建一个名为名称的变量并分配。
作为开发人员,他们不希望其他人能够访问其在功能中保存的值。他们只希望该功能的处理水平。因为下面示例的左侧不使用var变量,所以我们可以看到一个可以在函数之外使用的foo变量。
使用var
的差异但是,我们声明的变量应始终存在,可见并在定义范围内可访问。这是我们开发人员一直以来的目标。随着代码数量的增加,无法在此之外管理访问,并且不清楚变量从哪里修改。
必须在较低范围中的那些范围内声明的变量。这是至关重要的要求。这已经是预期的结果。
上范围定义的变量
我们使用LET/CONST什么?
目前,我们对功能范围感到满意。它仅在诸如/while,如果/switch和功能之类的范围定义中使用。但是,当我们的要求以异步/诺言,箭头函数和回调增长的嵌套块形式创建代码时,该功能中的var就不足了。
尽管左侧的VAR变量定义了最内在的范围,但也可以在顶部范围中使用。取而代之的是,我们希望内部范围变量从外部无法访问,如右侧所示。
嵌套范围定义
const 可防止您在初始分配后将任何作业进行变量。这样,如果您定义了PI常数并且有人想更改它,JS会丢下错误。
2.2箭头功能
我们可能会说我们用更数学语言编写箭头函数或功能代码。
当我们描述如何使用下面的箭头函数定义正常函数时,您会相信您正在构建数学功能。您会注意到这种写作风格使创建代码和改进代码可读性变得更加容易。
作为替代箭头功能定义的实例,请考虑以下内容。
- 没有参数常数函数
- 一个纯粹的功能,该功能采用参数并返回答案
- 一个不需要参数封装()的定义,因为它只有一个参数
- 等等...
那么,它如何提高代码可读性?如果我们从上方使用高阶函数。以下是正常函数的示例。
您可以看到在箭头函数中编写相同代码的容易。这是ES6箭头函数的力量。
箭头功能提供的附加功能
以下想法很难理解。这些概念将在深处的JS主题中进一步解释。我只是想在这里简要提及它们。
注1:没有用于箭头功能的构造函数或原型。它不适用于 new 。它的目的不是制作对象的实例。
因为注意:2 箭头函数不绑定 此绑定 ,词汇范围上下文确实会自动。
2.3课
尽管JS语言不是面向对象的语言,但OOP(面向对象的编程)可以提供语言语法和语法,这将使对其适应它的开发人员具有可比的意义。
现在考虑以下示例。在背景中,类结构如何功能?
实际上,一切都通过原型继续运行。例如,请参见下面列出的两个类。
- 前者是形状,
- 后来源自矩形。
尽管矩形缺乏一种方法,但我们可能会使用其父母的说塑料方法。又怎样?。查询的答案可以从存储在后台的数据结构中得出。您可以看到如何在 ** proto **下以形状复制该式矩形。通过在JavaScript语言中执行链函数,该原型可以赋予继承。关键就在这里。
2.4默认参数
有if语句检查javaScript值是否始终不确定,并将默认值应用于它们。在这种情况下,使用默认参数可改善代码的外观和可读性。
在某些情况下,该变量在开始时设置一个默认值,然后从提供的变量中创建该值。例如,在以下添加操作中,当我们传递未定义值时,我们会从默认参数中使用它们。
最后,在下面的示例中,您可以看到默认参数仅在传递不传递并传递未定义的情况下起作用。其他虚假的值并非如此。
2.5模板文字
新的字符串定义方法是=> backsticks
。
- 插值:将变量嵌入文本
- Multiline \ t \ n而不是这些新行或选项卡的这些字符,您可以定义像这样的代码
- 模板标签:如果要创建更复杂的标签处理器。您可以使用这些模板标签来定义诸如DSL(域特定语言)之类的结构,这些结构将根据不同定义的逻辑来解析和操作生成的文本。例如,下面的 sampletags 函数创建了这样的模板,您可以在代码中其他位置使用这些模板。
2.6破坏作业
破坏是一个概念,而不是我们熟悉的分配/分配技术,以使在对象或数组中生成(包装)的结构中更容易访问变量。这使代码更易于理解,并且更短。
为了简单性和清晰度,在下面的示例中,您可以看到在道具对象中访问名称和姓氏的容易。您可以在数组操作中看到相同的内容。它使我们能够在一行中进行许多行中的作业。
2.6.1 OBJE解构
2.6.2阵列解构
2.7增强的对象文字
您可以在下面的代码中看到,我们可以在没有键值配对的情况下定义对象。这使代码更可读。
在另一个示例中,当我们在对象初始化过程中使用[H]时,我们可以非常简单地定义对象,以防可变名称从外部获取。
2.8 for循环
应用程序中有不同的数据结构。这些是字符串,数组,链接清单,集合,地图,三角树,图形等。当您要导航这些数据结构时,我们需要比上面提到的循环更容易的方法。这些类型的结构同时提高了代码编写和代码的可读性。
在以下数据结构中
- 数组
- 字符串
- 地图
- 设置
- DOM数据结构
- 符号
我在下面进行了一些例子。这里一个非常重要的一点是,您可以在...
中使用继续/断开命令。在这里,我还想简要提及 in ... in Loop 。例如,您有一个对象,并且要返回其属性,可以使用...
还有其他方法可以访问对象的属性密钥或条目。 object.keys()和 object.entries()方法可以在返回的结果上创建循环。
2.9承诺
首先,我们使用回调来处理异步调用,这些零件有一些问题,并引入了承诺结构来解决它们。简而言之,
2.9.1回调
您可以看到创建回调螺旋结构是多么容易。您可能会在很短的时间内失去代码的可读性。
2.9.2承诺
带有承诺结构
- 我们可以通过当时的链条摆脱回调地狱结构
- 我们也有机会处理 err 状态。
- 也有一个捕获块可以处理所有过程err状态默认。
2.10 ES模块
在JavaScript中,多年来,我们一直在研究是否可以在单个标准下收集不同的模块加载方法和规格。使用 IIFE,CJS,AMD ,他们考虑了如何直接以JS标准呈现模块加载方法。
- jsiã§erisindekiâ内置
-
所有梳子都应由一侧支撑
- asenkron(async)ââα±ÅMalä±/li>
当我们检查ES模块语法时,我们可以看到,由于导出,我们可以轻松地提供我们想要与其他模块共享的变量和函数(在JavaScript,函数是一流的对象) 。多亏了导入,您可以看到我们可以使用其他模块中想要的变量或常数。您可以按以下方式使用它。
ES6模块语法
- 导出
- 导出默认
- 导入 *从 中
- 导入{def1,def2}来自
- 导入def1
因此,如果我们想在HTML而不是在JS中使用它,该怎么办。为此,您可以将模块用作脚本标签中的类型。
2.12传播操作员
JavaScript差异是分配给本节的数组差。简而言之
所以这次您在后台具有数组值,并且想在数组之外分布它们。对象开头的3个点允许将其分配,您可以在对象中使用类似的结构。
2.13设置/地图
对象对我们来说足够了,为什么我们需要地图类型?
定义对象非常简单,我们可以以键/值的形式创建所需的地图数据结构。那么,为什么我们需要地图数据类型而不是对象,什么不能对象?
- 只能将字符串/符号作为对象键值给出。
- 我们将用于...在方法中通过对象元素迭代。另一种方法是通过object.keys,object.values或object.entries方法 迭代迭代。
- 问题访问对象元素的问题
- 我们正在使用未定义的检查,以查看是否有值。
- 设置和get通过将对象视为 array 或。。 。
- 我们必须为对象元素数编写一个函数。
可以从上面理解,即使我们可以像对象映射一样使用它,开发人员也需要数据结构API。当我们检查地图API;
new Map() =>constructor
get(key) => function that returns the value corresponding to key. Here key can be the desired type. Number, Obj etc...
has(key) => does key have a value?
set(key,value) => function that assigns the value corresponding to key. Here key can be the desired type. Number, Obj etc...
size => number of elements
delete(key) => deletes the data map with key
clear() => deletes all keys and data
keys(), values(), entries() => returns the corresponding types as array.
for (let pair of mapObj) { //Loop
var [key, value] = pair;
console.log(key + " = " + value);
}
数组对我们来说足够了,为什么我们需要设置类型?
您知道,数组是可以简单地在js之类的js中定义的数据结构。
。,但这不是一套。集合不包含重复元素。您可以使用 .filter 提供唯一来提供此状态数组。但这意味着在添加一个元素后再次迭代整个系统。
相反, set 数据结构已经为我们提供了这种可能性。设置API
new Set() =>constructor
has(value) => key değeri var mı? size => eleman sayısı
delete(value) => elemanı silerfor
(let value of setObj) { //Loop
console.log(value);
}
在重要的转换中
[…new Set(arr)]
2.14发电机
通常,功能以3种方式终止。
- 函数操作的完成。
- 返回功能返回结果
- 返回错误
生成器将功能视为迭代器,并将其变成一种机制,您可以在该机构中停止并推进功能中的流量。这是什么意思?当我们在下面的函数中调用 sayhello()函数时,将立即执行整个函数,并将结果返回给您。您可以说异步/等待功能不会立即执行。该函数用于异步操作,并且此功能类型已经在发电机结构上执行。
您可以通过在其前面定义 *来使用发电机函数,并指定将使用 yourts 来控制流量的地方,并且您可以从外部使用该函数的流程使用 .next()。
此处显示了两种功能类型的操作。在第一个中,我们不能影响函数执行,而在发电机函数中,我们可以控制使用迭代器停止和推进程序。
这里的收益率与返回一样,但返回不仅值,而且还取决于功能完成的结果。
3. 2016年的JS语言改进(ES7)
3.1 array.prototype.在内
数组包含方法之前,我们在大多数地方使用了数组索引方法,并说如果该值大于-1,则包含此值。但是,当我们查看它时,索引方法的目的是不同的。我们不想知道我们想了解多少元素,该数组是否包含此元素
aynä±durumuâ string tã¼rã¼ndedegã¶Rebiliriz。
3.2指数操作员(**)
要说2超过4,您可以使用**命令而不是Math.pow。
3.3 array.prototype.find and array.prototype.findindex
find()返回与条件
的数组中的元素findIndex()返回与条件
的数组中元素的位置,即索引3.4 object.getownpropertyDescriptor
对象属性值的属性提供了有关值,可写的,可配置,枚举,get,set 。
的信息4. 2017年的JS语言改进(ES8)
4.1弦填充
字符串允许您完成某个字符。
- 是否要使用空白字符 /具有一定模式。< / li>
- padstart/padend:是否开始/结束填充操作
4.2对象(值,条目)
values():将对象在对象中的值返回作为数组。
entries():返回对象自己的值[键,值]作为数组。
4.3异步功能
js提供了许多方法来控制异步函数的输出,回调,承诺和最后的异步函数
4.3.1回调
您可以看到创建回调螺旋结构是多么容易。您可能会在很短的时间内失去代码的可读性。
4.3.2承诺
带有承诺结构
- 我们可以通过当时的链条摆脱回调地狱结构
- 我们有机会处理 err 状态。
- 所有过程err state默认句柄也有一个捕获块。
4.3.3异步/等待
实际上,这是我将来会讨论的话题,但是总而言之,随着ES8随附的异步/等待,您可以像普通同步代码一样编写代码,而不是这样。这次,我们在代码中放了一个标签。看,此功能是异步的,此呼叫是异步的,等待在这里等待。您也可以直接使用尝试 - 捕获机制。
4.4共享记忆和原子
JavaScript,共享记忆和原子学,是为更有效,有效地运行多线程编程而开发的功能。
共享内存允许多个线程访问同一内存区域,从而使线程之间的通信更快,更有效。
sharedArrayBuffer 对象用于创建可以通过多个线程访问的共享内存缓冲区。
Atomics 提供了一种在共享内存位置执行低级原子操作的方法。这些操作保证是不可分割的,不能被其他线程打断,以确保安全,正确访问共享内存。
5. 2018年的JS语言改进(ES9)
5.1异步迭代
这是 for-wait loop 的能力,它可以在集合上提供迭代。
5.2休息/传播
休息的概念是一种我们已经知道的其他语言中经常使用的概念。例如,我想举一个Main的示例,这是C,Java语言的应用程序的开始。
在以下C程序中,argc是参数的数量,argv是数组中传递的参数。在这里,在第一次运行程序时,要传递到此参数数组中的主要函数的参数将传递给主函数。
让我们在Java编程语言中查看相同的内容。
应用程序启动后,它将这些参数作为参数传递。在这里,它有可能以java语言为varargs(...)作为数组传递0或更多参数。
我上面描述的情况一直是需要将数组作为参数传递给函数。同时,与其使用[]数组编写本文,而是用3个点(...)做到这一点有什么优势,也就是说。
让我们用一个示例来解释这一点。让我们有一个数字数组,然后尝试找到它的结果。
让我们用休息重写代码。如下面的代码所示,我们的函数没有更改,但是它允许我们将参数传递给我们想要的函数,而无需呼叫者部分中的数组对象。
5.3 Promise.Prototype.fin
Promise 原型依赖性(然后,最终捕获)方法然后()()充当使您创建承诺链的连词。 catch()允许您捕获在拒绝期间未处理的错误。 最后()当承诺最终成功完成或失败时,该方法被调用。
5.4 REGEXP改进
- Unicode属性逃脱,
- 命名捕获组,
- BookBehind断言。
6. 2019年的JS语言改进(ES10)
6.1阵列(扁平,flatmap)
flat()将多维阵列结构转换为一维。
flatmap()i se映射霜冻阵列值一维制造。
6.2可选捕获绑定
允许您在捕获块中跳过标识符标识符,以防您不需要捕获错误。
6.3对象(从entries)
它用于通过条目创建对象克隆。
6.4字符串(Trimstart,Trimend)
如果字符串的开头或结尾处有空格,请删除它们。
6.5符号(描述)
为了更好地遵循符号中的代码并调试代码,它已允许输入描述。
6.6 array.prototype.sort() - 稳定排序
数组结构排序操作不能在ES10之前保持稳定,并且此差异可能会根据所用JavaScript引擎而有所不同。
现在接收比较函数的sort()操作根据从此处返回的负值和正值执行排序操作。排序过程成功了。
6.7良好的JSON(Stringify)
在以前版本的ecmascript中,json.stringify()方法以不符合JSON规范的方式序列化了某些数据类型。例如,NAN,Infinity和-Infinity值被序列化,因为零和未定义的值被完全省略。
随着ES10中的“良好的JSON.STRINGIFY”功能的引入,JSON.STRINGIFY()方法已更新以产生与JSON规范更一致的JSON输出。这意味着NAN,Infinity和-Infinity值现在被序列化为“ null”,未定义的值被序列化为“未定义”。
6.8静态场
Java语言中发现的功能正在慢慢进入JavaScript语言。其中一个允许我们直接创建函数,直接取决于类的定义,而无需创建具有静态功能的类别的类。
。7. JS语言改进2020年(ES11)
7.1 bigint
JavaScript 2âµâââis -1是您在JavaScript中可以表示的最大数字。 Number.MAX_SAFE_INTEGER
用作值。这使得值9007199254740991。当您在整数上进行操作时,当您添加2时,当您添加4时,您可以看到它现在给出不正确的值。不再可能对此数字执行可靠的操作。
现在,您可以通过在数字末尾添加n个字符或通过 bigint(number)。
7.2动态导入
因此,在现代JavaScript中,您可以在JavaScript软件包顶部静态地进行 Import 操作。
实际上,上述静态导入在使代码更可靠且脆弱的方面非常有用。
但是在网络上,我们需要很多代码,而不是从应用程序的开头,而是我们使用的代码。
在这种情况下,在稍后的架构和性能方面,可能有必要在您的应用程序中包括一些代码。
换句话说,它不允许我们导入按钮依赖性,而条件取决于我们的代码。但是使用动态导入方法,它允许您导入和使用运行时模块。
7.3无效合并
在正常情况下,当我们患有虚假条件时,它给了我们或操作员的另一侧。
新操作员,?符号(false,0“”),仅在未定义和无效的情况下,但在所有虚假的情况下才能处理另一部分,是因为它仅在未定义和无效的情况下起作用。
因为诸如0、0n之类的概念,“ false”,“”左侧的概念在我们的应用中可能有意义。在这种情况下,您可以使用?
7.4可选链接
JS开发人员经常遇到这种类型的“ typeError:无法读取属性” 经常遇到错误。在属性访问期间,对象中没有对象会导致这种类型的错误。在这里,首先必须检查该对象,并且必须在if。
中进行此类评估。如果在代码的许多部分中进行检查,就需要额外的。 (注意:如果检查也是一种方法,则诸如打字稿和保护开发人员之类的语言的出现。但是JS引入了可选的链接功能,使其工作更容易。
如下示例可以看到,当我们要访问不存在对象的属性时,我们会得到一个TypeError。
可选的链接引入了一种防止这种方法的方法。
我们可以在数组和函数调用中使用相同的受控调用。
7.5承诺
添加了Allsettled方法,已添加到承诺方法中。它返回了有关已满且未实现的承诺的详细结果。
承诺方法
在Promise 的原型中,绑定(然后,最终捕获)方法, then()充当使您创建承诺链的连词。 catch()允许您捕获在拒绝期间未处理的错误。 最后()当承诺最终成功完成或失败时,该方法被调用。
(解决,被拒绝)方法在成功/失败的诺言完成后被调用。像promise..ulolve(value),promise.redject(err)。
管理多个承诺条件的方法(全部,种族,盟军)
- 全部:等待所有承诺将成功完成。
- 种族:获得任何首先完成的承诺的结果。
- Allsettled:当所有人承诺成功和不成功的操作完成时,它将返回结果。
7.6字符串#
使用正则表达式时,单词匹配会找到该正则发生的所有单词,而相关索引等...没有找到它们,而是返回单词。当您需要对这些单词的索引执行操作时,您需要运行单独的逻辑。例如,在github logViewer(Example application)中,我们要在部分中着色
必须找到并更改颜色代码。
上面我还插入了$!$代码以访问这些索引。
由于我们不知道匹配的哪种颜色匹配,所以我必须转向这样的替换方法。
另一方面,匹配允许我们通过返回数组中的每个零件的原因来以更好的方式操作应用程序逻辑。
7.7 Globalthis
是JS在浏览器,服务器还是本地运行,JS引擎在工作环境中创建全局执行上下文,并从该全局范围内为浏览器提供了WebAPI的访问。第一个全局执行上下文包含一个全局对象和此对象。 jsengine在JS执行环境中首次站立时将其放置。
例如,控制台和窗口对应于在下面的浏览器中运行的JS代码的全局对象。
在浏览器和nodejs运行时环境中,添加了globalthis变量,以便全局上下文可以以相同的方式访问不同的运行时间。
7.8模块名称空间导出
允许模块定义一个单个对象,该对象用作其所有导出的命名空间。此功能使代码从模块进行多个导出时更简洁,可读。
它是使用导出 *为创建的。例如:
7.9定义订单的定义良好
在旅行对象的元素时,您通常会使用 。由于这些元素的保留不在数组中,而是像地图一样,因此不能保证该命令在对象中的定义期间。使用此功能,可以确保此循环的元素以一定顺序给出对象元素。
7.10 Import.Meta
动态导入还提供了一个包含当前导入模块的信息的元属性。当前内部有一个URL属性,代表模块引用的URL。
7.11私人字段(#)
在2015年之前,这些变量(var)函数可以从任何地方访问,这是一个问题。 iife功能用于此
如果立即调用函数,并且结果/结果对象存储在变量中,则此类函数称为 iife(立即调用函数表达式)。这种功能的目的是确保仅在该范围中访问此范围中创建的变量。通常,在诸如jQuery,Prototype之类的库中,IIFE方法用于避免矛盾的变量名称并在范围内执行操作。
7.11.1让,const
使用ES6变量变量,我们开始使用 let,const 在博客级别定义变量。我们已经能够创建具有功能模块模块结构的私人和公共财产结构。
7.11.2 ES6类
使用ES6类,我们已经能够创建可以在构造函数中创建变量并将其在类功能中使用的变量,但是这些变量仍然没有完全从外部删除可访问性。所有私人变量均用_定义,以便清楚,当然,这种结构不是从外部更改的障碍,开发人员只是一个变量名称定义,可以提高可见性以告知私人变量。
。或,为了提供完整的隐私,有必要定义构造方法中的所有变量和函数,这不是类用法中正确的方法。
7.11.3私人领域
多亏了新的私人字段能力,可以定义只能从类中访问的变量。
8. JS语言改进2021(ES12)
8.1数字分离器
通过_ underscore
使数字值更易读的功能例如,让我们检查以下数字。我在右侧发表评论后写的数字更可读。
,。用法可能会根据语言有所不同。由于我们只想在此处格式化数字,因此以下表示使读取代码中的数字变得更加容易。
除了所有这些外,您还可以在不同的数字定义中使用这些括号。
8.2 String.prototype.replaceall
我们已经在弦原型中添加了多年的字符串原型。
现在,此代码将作为JS默认值出现。这样,它提供了机会来查找和更改您要在代码中更改的所有单词。
和结果
8.3 Promise.any()和骨料
当我尝试一起处理多个承诺时,至少有一个是根据解决状态返回解决方案的承诺电话。
gentregateError 在promise的情况下,在错误的情况下返回数组中的多个错误。
8.4逻辑分配操作员
在本节中,分配值时,我们会事先进行IF控制,并根据值的状态分配。
- 逻辑和分配
- 逻辑或分配
- 无效的合并操作员。
8.4.1逻辑和分配(&& =)
在逻辑和分配中,如果x值已经是真实值,则分配它。否则不会分配。
8.4.2逻辑或分配(|| =)
在逻辑或分配中,如果x值已经是一个错误值,则分配它。否则不会分配。
8.4.3无效的合并操作员(?? =)
逻辑无效合并仅在无效的情况下执行任务。
8.5私人课程方法和访问者
在ES11中,类属性值的私人能力以相同的方式适用于方法。在以下代码中,GetToken只能从类中的方法中使用,因为它被定义为私人方法。
它还允许定义getter和setter函数。
9. JS语言改进2022(ES13)
9.1 .AT()索引功能
我们可以在相关索引中访问类型,例如字符串,数组或char [index] 。您现在可以为此使用.at()函数。
9.2阵列从最后(Findlast)查找
在数组中搜索时,可用find(),findIndex()。为了反向搜索,findlast()和findlastIndex()函数已添加到数组原型中,用于在说string.dress.redverse.redverse的结构中搜索。
。9.3错误原因(原因)
为了在意外行为的情况下提供帮助,需要使用上下文信息来增加错误,例如错误消息和错误实例属性,以解释当时发生的事情。错误对象上的原因属性允许我们确定哪些错误导致其他错误。
9.4等待顶级运营商(等待)
以前等待关键字只能在异步块中使用,
现在,您可以以任何方式在此上下文之外从顶层使用它。下面有示例用途。
9.5类字段声明(#)
在ES11部分中有一个类似的部分,相同的部分是我们形容为私有字段的部分。您可以在这里再次阅读。
9.6人体工程学品牌检查私人领域(in)
为了检查私有字段是否属于相关对象,它可以检查使用关键字中的对象中的对象。在下图中,它允许通过私人道具进行相关部分的控件。
以下从此链接获取的示例
https://plainenglish.io/blog/latest-es13-javascript-features
9.7类静态块
它允许在类中定义静态函数和变量。现在,它允许根据需要定义静态块等。
以下示例取自(https://plainenglish.io/blog/latest-es13-javascript-features)
9.8 Hasown
object.prototype.hasownproperty函数存在,但建议通过原型使用它。相反,可以开发可直接从对象中使用的.Hasown函数。
9.9 REGEXP匹配指数
现在只能通过Regexp匹配在单词上工作时访问额外的索引数据。下面您可以在我们打电话 /g /dg时看到额外的索引。< /p>