1.var,let,const区别
答:(1).var有变量声明提升,let&&const没有,这样导致了let,const必须声明后才可以访问使用(tdz) => 暂时性死区”也意味着typeof不再是一个百分之百安全的操作,如果一个变量没有被声明,使用typeof反而不会报错(值会变为'undefined')(没有遇到let/const),(2)var,let可以在定义后重新赋值,const是个常量,它不可以(但是如果他是复杂数据类型,改变它的属性值是没问题的,与定义概念并不冲突),(3).var可以重复声明,取值去最后的声明,let不允许在相同作用域内,重复声明同一个变量,(3).块状作用域 => {}这句话有异议,但是说的很有道理,块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。Object.freeze({}); => 冻结对象,(4).未定义就声明的变量会默认为window全局的变量,var的变量都归window所有,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性即不会归window所有

总结:es6的六种声明变量  => var let const function import class  注意:在浏览器环境指的是window对象,在 Node 指的是global对象。

2.变量的解构赋值 => es6允许一定的模式,从数组中和对象中提取,对变量进行赋值,这被称为解构

=> 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值,如果解构失败,变量的值等于        undefined(1).数组的模式匹配 模式匹配”,只要等号两边的模式相同(数据结构),左边的变量就会被赋予对应的值    let [a, b, c] = [1, 2, 3](2).对象的解构赋值    对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的                    属性没有次序,变量必须与属性同名,才能取到正确的值    let {foo, too} = {foo: 'foo', too: 'too'}(3).字符串的解构赋值    字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象

3.模板字符串

`${变量1},{变量2}` => `${fn()}`  {}最终会调用toString的方法,可嵌套

4.字符串扩展