这个问题看似简单,但当你真正回答起来的时候就是另一回事儿了,ES6在我们日常使用时,那可是信手拈来,真正回答问题的时候肯能连箭头函数都记不起来......
无论是校招还是社招,如果你恰巧被问及这个问题,那么请你尽可能的多说一点,这样面试官才会认为你是真正的掌握了ES6,ES6的内容很多,这里只罗列了常用的特性及其要点,在面试的时候还需要围绕这些点根据自己的理解尽可能的展开。最后本文只适用于面试回答,不适合用来学习ES6,如果你想更全面的的了解ES6,可以阅读阮老师的ES6入门
1. let和const命令的出现
- let和const区别:const定义一个只读常量,一旦声明变量,就必须立即初始化,不能留到以后赋值且不可改变。
- 不存在变量提升,声明的变量一定要在声明后使用,否则报错
- 不允许重复声明变量,不允许在相同作用域内,重复声明同一个变量
- 块级作用域,ES6之前只有函数作用域与全局作用域,一个大括号即一个块级作用域
- 声明的变量不在属于window
2. 解构赋值
- 数组、对象、字符串等解构赋值的基本用法及默认值的设置
- 解构的用途
(1) 交换变量的值
(2) 接收函数返回的多个值
(3) 函数参数默认值的设置 (4) 用于模块导入的按需加载
3. 字符串的扩展
- 模版字符串
- 方法的增添
includes()
,startsWith()
,endsWith()
..... - 正则表达式的具名组匹配
4. 数值的扩展
- 完善二进制(0b开头)与八进制(0o开头)的表示
- 方法的移植与增加 将
parseInt()
和parseFloat()
从window
对象移植到Number
对象上 - 指数运算符**
5. 函数的扩展
- 函数参数默认值的设置
- 箭头函数
使用箭头函数的注意事项:
(1)函数体内的this
对象,就是定义时所在的对象,而不是使用时所在的对象
(2)不可以当作构造函数,也就是说,不可以使用new
命令,否则会抛出一个错误
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替 - rest参数
6. 数组的扩展
- 扩展运算符
用途
(1)复制数组
(2)合并数组
(3)函数的rest参数 - 方法的扩展
Array.from()
、Array.of()
实例上的方法fill()
、flat()
7. 对象的扩展
- 属性以及方法的简洁表示
- 属性名表达式
- 可遍历性
for..in
、Object.key(obj)
- super关键字的增加
- 新增方法
Object.is()
、Object.assign()
8. Module导入模块
讲到这一点就很有必要给面试官讲一下ES6模块与CommoonJS模块的差异
- CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
- CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。 如果你不是很清楚可以阅读这篇文章
9. 其他方面
- promise与async的运用和理解,提及这里他接下来可能会问promise的实现,这也是一道常考题
- Symbol数据类型
- set和map结构
- class
最后希望你面试成功,越努力越幸运,加油