var、 let 和 const 命令
let,const用于声明变量,用来替代老语法的var关键字,与var不同的是,let、const会创建一个块级作用域(一个花括号内就是一个新的作用域)。var是没有块级作用域的。
外部的console.log(x)拿不到前面2个块级作用域声明的let。
还有就是使用let、const关键字声明的变量的for循环和var声明的不同,用var声明的for循环只会执行一次var i = 0,而后面的两个部分在每次循环的时候都会执行一遍,而使用let、const关键字声明变量的for循环,除了会创建块级作用域,let、const还会将它绑定到每个循环中,确保对上个循环结束时候的值进行重新赋值,它每一次循环都会重新声明一次而且每一次循环都会创建一个块级作用域,var声明的for循环只会声明一次不会创建块级作用域。
箭头函数
箭头函数和function关键字创建的函数区别
1.箭头函数没有arguments
2.箭头函数没有prototype属性,不能用作构造函数不能用new关键字调用
3.箭头函数没有自己的this,引用的是上下文的this
箭头函数替代了以前需要显式的声明一个变量保存this的操作,使得代码更加的简洁。
解构赋值
解构赋值可以直接使用对象的某个属性,而不需要通过属性访问的形式使用,对象解构原理我认为是通过寻找相同的属性名,然后原对象的这个属性名的值赋值给新对象对应的属性。
使用对象解构,可以给使用axios的响应结果进行解构axios默认会把真正的响应结果放在data属性中。
数组解构的一个用途是交换变量,避免以前要声明一个临时变量值存储值。
扩展运算符
扩展运算符同样也是ES6一个非常重要的语法,使用3个点(...),后面跟着一个含有iterator接口的数据结构。
如果是数组使用扩展运算符使得可以"展开"这个数组,数组是存放元素集合的一个容器,而使用扩展运算符可以将这个容器拆开。
扩展运算符还可以代替数组的concat方法
剩余运算符
剩余运算符最重要的一个特点就是替代了以前的arguments,剩余运算符可以和数组的解构赋值一起使用,但是必须放在最后一个,因为剩余运算符的原理其实是利用了数组的迭代器,它会消耗3个点后面的数组的所有迭代器。
剩余运算符和扩展运算符的区别就是,剩余运算符会收集这些集合,放到右边的数组中,扩展运算符是将右边的数组拆分成元素的集合,它们是相反的
for ... of循环
for ... of是作为ES6新增的遍历方式。
for ... of和for ... in的区别:
1.for ... of只能用在可迭代对象上,获取的是迭代器返回的value值,for ... in 可以获取所有对象的键名。
2.for ... in会遍历对象的整个原型链,性能非常差不推荐使用,而for ... of只遍历当前对象不会遍历它的原型链、
3.对于数组的遍历,for ... in会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for ... of只返回数组的下标对应的属性值。