ECMAScript新特性汇总,面试别在答错

304 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

前言

本文从我们熟悉的es6开始整理出ECMAScript的一些重大更新或者比较重要的新特性,让面试不会在答错

ECMAScript是什么:

  • 可以看作是javaScript的标准化规范
  • javaScript是ECMAScript的扩展语言
  • ECMAScript只提供了最基本的语法
  • 浏览器中:JavaScript = ECMAScript + BOM + DOM
  • node中:JavaScript = ECMAScript + fs + net + etc.

es2015(es6)新特性

  1. let:块级作用域
  2. const:let基础上增加只读,不能被修改,指的是内存地址
  3. 解构:数组解构,对象解构,如:[...arr], {...obj}
  4. 模版字符串:``
  5. 字符串的扩展方法:startsWith()、endsWith()、includes(),都返回true/false
  6. 参数默认值:要写在参数后面,如:function f(a:123)
  7. 剩余参数:...args,放最后
  8. 箭头函数:=>,没有this的机制
  9. 对象字面量的增强:
  • 变量名与值名相同时可以只写一个
  • 函数可以省略function,直接写方法
  • 计算属性名,加[]
  1. Object.assign:Object.assign(target,source1,source2),用于复制合并多个源对象到target对象,如:Object.assign({}, obj), 可用于复制对象
  2. Object.is:同值比较的算法,判断两值是否相等
  3. Proxy:代理,监视属性读写(理解为门卫,输入输出都需要经过门卫),类比es5的defineProperty
  4. Reflect:统一提供一套操作对象的API,包含13个方法,reflect成员方法就是Proxy处理对象的默认实现,如:
    const obj = {name: 'logan',age: 18}
    // 原始操作
    console.log('name' in obj)
    console.log(delete obj.name)
    console.log(Object.keys(obj))
    // Reflect API操作
    console.log(Reflect.has(obj,'name'))
    console.log(Reflect.deleteProperty(obj,'name'))
    console.log(Reflect.ownKeys(obj))
    
  5. Promise: 解决异步编程中回调函数的嵌套问题
  6. class类
  7. 静态方法:static,注意this
  8. 类的继承:extends,调用super()相当于调用父类的构造函数
  9. Set:集合,不允许重复(可用于数组去重等)
  10. Map:数据结构,可以以任意类型的值作为键,对象只能以字符串作为键(es6 可以用Symbol())
  11. Symbol:最主要的作用就是为对象添加独一无二的属性名
  12. for...of:遍历数组,能用break终止遍历,foreach, map不能被终止
    原理:可迭代接口iterator
    注意:for...in 是es5的
  13. 迭代器模式:对外提供统一遍历接口,示例代码太长,这就不贴了
  14. 生成器 generator:* yield
    应用:自增id
  15. ES Modules:模块化

es2016(es7)新特性

  1. includes:数组方法,判断有没有该值,返回true/false
  2. 指数运算符:2**10,等于1024,Math.pow(2, 10)

es2017(es8)新特性

  1. Object.values(obj):获取对象的值转换为数组
  2. Object.entries(obj):返回键值对数组
  3. Object.getOwnPropertyDescriptors(obj):配合es6 get set 所使用
  4. String.prototype.padStart / String.prototype.padEnd:补充字符串达到指定长度
  5. 可以在函数参数中添加尾逗号:方便开发
  6. Async/Await:promise语法糖

es2018(es9)新特性

  1. 展开和剩余应用在对象上(对象的解构)
  2. 正则表达式的增强
  • 环视
    var res = str.replace(/张三(?=丰)/g, '李四')
    var res = str.replace(/张三(?!丰)/g, '李四')
    
    'A00 B00'.replace(/(?<=A)00/g, '88')
    'A00 B00'.replace(/(?<!A)00/g, '88')
    
  • 正则命名组
  1. Promise.prototype.finally(), 不管成功失败都会走

es2019(es10)新特性

  1. 数组稳定排序
    如果按相同的id排序,确保每次排序的结果都是相同的
  2. try ... catch
    catch的参数可省略(e)

es2020(es11)新特性

  1. 空值合并运算符
    function(options){
     // 只有size = null 或者 undefined,才会走??后的值,为了避免0的情况
     options.size = options.size ?? 100
     }
    
  2. 可选链运算符
    // 以前
     const res = item.userInfo ? item.userInfo.name
     // 现在
     const res = item.userInfo?.name
     // obj?.prop
     // obj?.[expr]
     // arr?.[index]
     // func?.(args)
    

es2021(es12)新特性

  1. String.prototype.replaceAll
  2. Promise.any

es2022(es13)新特性

...

总结

想学习更多详细更新可到官方github上查看,附上地址github
整理不易,如果有帮到你,给个赞吧!👍

往期精彩文章

🌟Promise 面试常考手写方法汇总
🌟Promise 常见误区
🌟js 柯里化艺术
🌟简述BFC是什么,以及在工作中的应用场景
🌟从浏览器输入网址到页面渲染中间发生了什么(通俗易懂)