ES6-ES13新特性

ES6(ECMAScript 2015)

ES6 正式支持了类、模块、迭代器、生成器、箭头函数、Promise、反射、代理和众多新的数据类型

  • let 和 const
  • 解构赋值
  • 模板字符串
  • 函数参数默认值和箭头函数
  • 扩展运算符
  • 对象的属性简写
  • super 关键字
  • Symbol 变量
  • Set 和 Map 数据
  • 代理和反射
  • 迭代器
  • Promise
  • class 类
  • Module 模块

es6

ES7(ECMAScript 2016)

ECMAScript 2016 中添加了以下功能:

  • Array.prototype.includes() 检查数组是否包含给定值。
  • 求幂运算符 (**): 4 ** 2 => 16

es8(ECMAScript 2017)

ECMAScript 2017 中添加了以下功能:

  • 异步函数(async/await)让我们使用看起来像同步的语法来编写异步代码。
  • Object.values() 返回一个数组,其中包含给定对象的所有可枚举字符串键属性的值。
  • Object.entries() 返回一个数组,其中包含给定对象的所有可枚举字符串键属性的键值对。每对都被编码为一个二元素数组。
  • 字符串填充:字符串方法 String.padStart()String.padEnd() 插入填充文本,直到接收者足够长:
    '7'.padStart(3, '0'); // '007'
    'yes'.padEnd(6, '!'); // 'yes!!!'
    
  • 函数参数列表和调用中的尾随逗号:自 ES3 以来,数组文字和自 ES5 以来的对象文字中都允许使用尾随逗号。它们现在也允许在函数调用和方法调用中使用。
  • Object.getOwnPropertyDescriptors()
  • 共享内存和原子 (见提案)

ES9(ECMAScript 2018)

ECMAScript 2018 中添加了以下功能:

  • 异步迭代是同步迭代的异步版本。它基于 Promise:
    • 使用同步迭代,我们可以立即访问每个项目。使用异步迭代,我们必须 await 在访问项目之前。
    • 对于同步迭代,我们使用 for-of 循环。对于异步迭代,我们使用 for-await-of 循环。
  • 传播到对象文字中:通过在对象文字中使用传播(...),我们可以将另一个对象的属性复制到当前对象中。一个用例是创建对象的浅拷贝obj:
    const shallowCopy = {...obj};
    
  • 解构属性:当对象解构一个值时,我们现在可以使用解构语法(...)来获取一个对象中所有以前未提及的属性。
    const {a, ...remaining} = {a: 1, b: 2, c: 3};
    assert.deepEqual(remaining, {b: 2, c: 3});
    
  • Promise.prototype.finally() 与 finally try-catch-finally 语句的子句相关——类似于 Promise 方法如何.then() 与 try 子句 .catch() 相关并与 catch 子句相关。
    换句话说:.finally() 无论 Promise 是否被履行或拒绝,都会执行回调。
  • 新的正则表达式功能
  • 模板文字修订 允许在标记模板中带有反斜杠的文本在字符串文字中是非法的

ES10(ECMAScript 2019)

ECMAScript 2019 中添加了以下功能:

  • Array.prototype.flatMap() 工作方式类似.map(),但让回调返回零个或多个值的数组,而不是单个值。然后将返回的数组连接起来并成为 .flatMap() 用例包括:
    • 同时过滤和映射
    • 将单个输入值映射到多个输出值
  • Array.prototype.flat() 将嵌套数组转换为平面数组。或者,我们可以告诉它应该在哪个嵌套深度停止展平。
  • Object.fromEntries() 从可迭代的条目创建一个对象。每个条目都是一个包含属性键和属性值的二元素数组。
  • 字符串方法.trimStart() 工作方式 .trimEnd() 类似 .trim(),但仅在字符串的开头或结尾删除空格。
  • 可选catch:如果我们不使用它,我们现在可以省略子句的参数。
  • Symbol.prototype.description 是读取符号的描述。以前,描述包含在结果中,.toString() 但无法单独访问。
  • JSON 超集
  • 格式良好JSON.stringify()
  • Function.prototype.toString()修订

ES11(ECMAScript 2020)

ECMAScript 2020 中添加了以下功能:

  • 新模块功能

    • 动态导入 import():正常的 import 语句是静态的:我们只能在模块的顶层使用它,它的模块说明符是一个固定的字符串。import() 改变了这一点。它可以在任何地方使用(包括条件语句),我们可以计算它的参数。
    • import.meta 包含当前模块的元数据。它的第一个广泛支持的属性是 import.meta.url 包含一个带有当前模块文件 URL 的字符串。
    • 命名空间重新导出:以下表达式导入'mod'命名空间对象中模块的所有导出ns并导出该对象。
      `export * as ns from 'mod';`
      
  • 属性访问和方法调用的可选链接。可选链接的一个示例是:

    `value.?prop`
    

    此表达式的计算结果为 undefined。否则,它的计算结果为value.prop。当某些属性可能丢失时,此功能在属性读取链中特别有用。

  • 空值合并运算符 (??)

    value ?? defaultValue
    

    该运算符允许我们在缺少某些内容时使用默认值。
    以前在这种情况下使用了逻辑或运算符 (||),但它在这里有缺点,因为只要左侧是假的(这并不总是正确的),它就会返回默认值。

  • Bigints – 任意精度整数:Bigints 是一种新的原始类型。它支持可以任意大的整数(它们的存储会根据需要增长)。

  • String.prototype.matchAll()/g:如果未设置标志,则此方法抛出,并返回一个包含给定字符串的所有匹配对象的可迭代对象。

  • Promise.allSettled() 接收一个可迭代的 Promises。它返回一个 Promise,一旦所有输入的 Promise 都被解决,该 Promise 就会实现。实现值是一个数组,每个输入 Promise 有一个对象——以下之一:

    • { status: 'fulfilled', value: «fulfillment value» }
    • { status: 'rejected', reason: «rejection value» }
  • globalThis 提供了一种访问全局对象的方法,该对象可在浏览器和服务器端平台(如 Node.js 和 Deno)上运行。

  • for-in: 在 JavaScript 中部分指定对象枚举顺序

ES12(ECMAScript 2021)

ECMAScript 2021 中添加了以下功能:

  • String.prototype.replaceAll() 让我们替换正则表达式或字符串的所有匹配项(.replace()仅替换第一次出现的字符串):
    'abbbaab'.replaceAll('b', 'x');
    // 'axxxaax'
    
  • Promise.any() 和 AggregateError:Promise.any() 返回一个 Promise,一旦 Promise 的可迭代中的第一个 Promise 完成,它就会完成。如果只有拒绝,则将它们放入 AggregateError 成为拒绝值的其中。
    Promise.any() 只对几个中第一个实现的 Promise 感兴趣时使用。
  • 逻辑赋值运算符
    a ||= b;
    a &&= b;
    a ??= b;
    
  • 下划线 ( _) 作为分隔符
    • 数字文字:123_456.789_012
    • Bigint 字面量:6_000_000_000_000_000_000_000_000n
      WeakRefs

ES13(ECMAScript 2022)

ES2022 可能会在 2022 年 6 月成为标准。以下提案已进入第 4 阶段,并计划成为该标准的一部分:

  • 班级新成员
    • 现在可以通过以下方式创建属性(公共插槽):
      • 实例公共字段
      • 静态公共字段
    • 私有插槽是新的,可以通过以下方式创建:
      • 私有字段(实例私有字段和静态私有字段)
      • 私有方法和访问器(非静态和静态)
    • 静态初始化块
  • 私有插槽检查:以下表达式检查是否obj有私有插槽#privateSlot:
    #privateSlot in obj
    
  • 模块中的顶层 await:我们现在可以在模块 await 的顶层使用,而不必再输入异步函数或方法。
  • error.cause:Error 及其子类现在让我们指定哪个错误导致了当前错误:
    new Error('Something went wrong', {cause: otherError});
    
  • .at() 可索引值的方法让我们可以读取给定索引处的元素(如括号运算符[])并支持负索引(与括号运算符不同)。
    ['a', 'b', 'c'].at(0);
    // 'a'
    ['a', 'b', 'c'].at(-1);
    // 'c'
    
    以下“可索引”类型具有方法.at():
    • string
    • Array
    • 所有类型化数组类:Uint8Array 等。
  • RegExp 匹配索引:如果我们向正则表达式添加一个标志,使用它会生成匹配对象,记录每个组捕获的开始和结束索引。
  • Object.hasOwn(obj, propKey) 提供了一种安全的方法来检查对象 obj 是否具有带有 key 的自己的属性 propKey。与相比 Object.prototype.hasOwnProperty,它适用于所有对象。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268