美文网首页
ES6-ES13新特性

ES6-ES13新特性

作者: sanyer | 来源:发表于2022-05-03 20:45 被阅读0次

    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,它适用于所有对象。

    相关文章

      网友评论

          本文标题:ES6-ES13新特性

          本文链接:https://www.haomeiwen.com/subject/qcmkyrtx.html