es5之后的es更新简述

发布时间 2023-10-30 17:23:02作者: 你觉得呢!

ES5  新增

  1. 严格模式(Strict Mode):ES5引入了严格模式,通过在脚本或函数的开头添加"use strict";来启用。严格模式提供了更严格的语法和错误检查,帮助开发者编写更安全、更规范的代码。

  2. JSON对象支持:ES5将JSON(JavaScript Object Notation)作为一种原生的数据格式进行支持,提供了JSON.parse()JSON.stringify()方法,用于解析和序列化JSON数据。

  3. 新的数组方法:ES5新增了一些方便的数组方法,如Array.prototype.forEach()Array.prototype.map()Array.prototype.filter()Array.prototype.reduce()等,使得对数组的遍历和操作更加简洁和高效。

  4. Function.prototype.bind():ES5引入了Function.prototype.bind()方法,用于绑定函数的上下文(this)和预设参数,返回一个新的函数。这样可以方便地创建具有固定上下文和参数的函数。

  5. Object.create():ES5新增了Object.create()方法,用于创建一个新对象,以指定的原型对象作为新对象的原型。

  6. Getter和Setter:ES5引入了Getter和Setter方法,通过Object.defineProperty()方法可以定义对象属性的Getter和Setter函数,用于对属性的读取和设置进行控制。

  7. Array.isArray():ES5新增了Array.isArray()方法,用于判断一个值是否为数组类型。

ES6  新增

  1. 块级作用域变量(let和const):ES6引入了letconst关键字,用于声明块级作用域的变量。相比于var关键字,letconst具有更严格的作用域规则,可以避免变量提升和变量泄漏等问题。

  2. 箭头函数:ES6引入了箭头函数的语法,使用更简洁的语法定义函数。箭头函数具有更短的语法和更方便的上下文绑定,可以更好地处理this指向的问题。

  3. 模板字符串:ES6引入了模板字面量,使用反引号(`)来定义字符串,可以在字符串中插入变量和表达式,提供了更方便和可读性更高的字符串拼接方式。

  4. 解构赋值:ES6引入了解构赋值的语法,可以从数组或对象中提取值并赋给变量,使得代码更简洁和易读。

  5. 默认参数:ES6允许在函数定义时为参数提供默认值,当调用函数时没有传递对应参数时,将使用默认值。

  6. 扩展运算符:ES6引入了扩展运算符(...),可以将数组或对象展开为独立的元素,或将多个元素合并为一个数组或对象。

  7. 类和模块:引入了class关键字,可以更方便地定义类和面向对象的编程。同时,引入了模块化的语法,使用importexport关键字来导入和导出模块。模块化可以帮助开发者更好地组织和管理代码,提高代码的可维护性和可重用性。

  8. Promise:提供了一种更优雅的处理异步操作的方式,避免了回调地狱。

  9. 简化的对象字面量:可以直接在对象字面量中定义方法,不再需要使用冒号和function关键字。

  10. 迭代器和生成器:ES6引入了迭代器和生成器的概念,迭代器提供了一种遍历数据结构的统一方式,而生成器则是一种特殊的函数,可以通过yield关键字暂停和恢复函数的执行。

  11. Promise:ES6引入了Promise对象,用于处理异步操作。Promise可以更好地处理回调地狱问题,提供了一种更优雅和可读性更高的异步编程方式。

  12. 数组和对象的新方法:ES6新增了许多数组和对象的新方法,如Array.from()Array.find()Array.includes()Object.assign()等,提供了更方便和强大的操作数组和对象的方法。
  13. Set和Map数据结构:ES6引入了Set和Map两种新的数据结构,Set是一种无重复值的集合,Map是一种键值对的集合,提供了更方便和高效的数据存储和操作方式。
  14. for...of循环:ES6引入了for...of循环,用于遍历可迭代对象(如数组、字符串、Set、Map等),提供了一种更简洁和直观的遍历方式。
  15. Symbol:ES6引入了Symbol数据类型,表示独一无二的值,可以用作对象的属性名,提供了一种更安全和更灵活的属性定义方式。
  16. Proxy:ES6引入了Proxy对象,用于拦截和定制对象的操作,可以对对象的读取、赋值、函数调用等行为进行拦截和处理。
  17. Reflect:ES6引入了Reflect对象,提供了一组静态方法,用于操作对象,包括对象的属性获取、设置、函数调用等。

es7 新增

  1. Array.prototype.includes:新增了includes方法,用于判断数组是否包含指定的元素,返回布尔值。

  2. 指数运算符:引入了指数运算符(**),用于计算一个数的幂次方。

  3. Object.valuesObject.entries:新增了Object.valuesObject.entries方法,分别用于获取对象的值和键值对数组。

  4. String.prototype.padStartString.prototype.padEnd:新增了padStartpadEnd方法,用于在字符串的开头或结尾填充指定的字符,使字符串达到指定的长度。

  5. Async/Await:引入了asyncawait关键字,用于更方便地处理异步操作,使代码更加清晰和易读。

  6. SharedArrayBufferAtomics:引入了SharedArrayBufferAtomics对象,用于在多个线程之间共享内存和进行原子操作

es8 新增

  1. 异步迭代器(Async Iterators):引入了Symbol.asyncIteratorfor-await-of语法,用于更方便地处理异步迭代操作。

  2. Object.getOwnPropertyDescriptors:新增了Object.getOwnPropertyDescriptors方法,用于获取对象所有属性的描述符。

  3. 字符串填充方法改进:对padStartpadEnd方法进行了改进,允许指定填充字符串的重复次数。

es9 新增

  1. 异步迭代器方法改进:对异步迭代器的方法进行了改进,引入了returnthrow方法。

  2. Promise.prototype.finally:新增了finally方法,用于指定无论Promise状态如何都会执行的回调函数。

  3. Rest/Spread 属性:引入了对象的Rest和Spread属性,类似于数组的Rest和Spread操作。

es10 新增

  1. Array.prototype.flatArray.prototype.flatMap:新增了flatflatMap方法,用于扁平化数组和映射数组。

  2. Object.fromEntries:新增了Object.fromEntries方法,用于将键值对数组转换为对象。

  3. String.prototype.trimStartString.prototype.trimEnd:新增了trimStarttrimEnd方法,用于去除字符串开头和结尾的空格。