面试——ES6有什么新特性

6,971 阅读3分钟

这个问题看似简单,但当你真正回答起来的时候就是另一回事儿了,ES6在我们日常使用时,那可是信手拈来,真正回答问题的时候肯能连箭头函数都记不起来......

无论是校招还是社招,如果你恰巧被问及这个问题,那么请你尽可能的多说一点,这样面试官才会认为你是真正的掌握了ES6,ES6的内容很多,这里只罗列了常用的特性及其要点,在面试的时候还需要围绕这些点根据自己的理解尽可能的展开。最后本文只适用于面试回答,不适合用来学习ES6,如果你想更全面的的了解ES6,可以阅读阮老师的ES6入门

1. let和const命令的出现

  1. let和const区别:const定义一个只读常量,一旦声明变量,就必须立即初始化,不能留到以后赋值且不可改变。
  2. 不存在变量提升,声明的变量一定要在声明后使用,否则报错
  3. 不允许重复声明变量,不允许在相同作用域内,重复声明同一个变量
  4. 块级作用域,ES6之前只有函数作用域与全局作用域,一个大括号即一个块级作用域
  5. 声明的变量不在属于window

2. 解构赋值

  1. 数组、对象、字符串等解构赋值的基本用法及默认值的设置
  2. 解构的用途
    (1) 交换变量的值
    (2) 接收函数返回的多个值
    (3) 函数参数默认值的设置 (4) 用于模块导入的按需加载

3. 字符串的扩展

  1. 模版字符串
  2. 方法的增添 includes(),startsWith(),endsWith().....
  3. 正则表达式的具名组匹配

4. 数值的扩展

  1. 完善二进制(0b开头)与八进制(0o开头)的表示
  2. 方法的移植与增加parseInt()parseFloat()window对象移植到Number对象上
  3. 指数运算符**

5. 函数的扩展

  1. 函数参数默认值的设置
  2. 箭头函数
    使用箭头函数的注意事项:
    (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
    (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误
    (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替
  3. rest参数

6. 数组的扩展

  1. 扩展运算符
    用途
    (1)复制数组
    (2)合并数组
    (3)函数的rest参数
  2. 方法的扩展Array.from()Array.of()实例上的方法fill()flat()

7. 对象的扩展

  1. 属性以及方法的简洁表示
  2. 属性名表达式
  3. 可遍历性for..inObject.key(obj)
  4. super关键字的增加
  5. 新增方法Object.is()Object.assign()

8. Module导入模块

讲到这一点就很有必要给面试官讲一下ES6模块与CommoonJS模块的差异

  1. CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
  2. CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。 如果你不是很清楚可以阅读这篇文章

9. 其他方面

  1. promise与async的运用和理解,提及这里他接下来可能会问promise的实现,这也是一道常考题
  2. Symbol数据类型
  3. set和map结构
  4. class

最后希望你面试成功,越努力越幸运,加油