1.let和const
1.let
let声明变量,没有变量提升。
是一个块级作用域。
在同一个作用域,不能重复声明。
作用1:for循环经典例子
解决var带来的变量提升的问题
作用2:不会污染全局变量
2.const
const 声明常量,一旦被声明,无法修改。
const 声明对象,可以修改对象内部的属性,但是不能直接整体改这个常量对象。
建议:在默认情况下用const,而只有在你知道变量值需要被修改的时候,使用let。
3.模板字符串
使用tab键上面的反引号,变量使用${}
3.强大的函数
(1)带参数默认值的函数
(2)默认的表达式也可以是一个函数
(3) 剩余参数:由三个点…和一个紧跟着的具名参数指定…keys
…keys解决了arguments的问题
keys是自己取的名
4.扩展运算符…
剩余运算符:把多个独立的参数合并到一个数组中(一般是在形参上)
扩展运算符:将一个数组分割,并将各个项作为分离的参数传给函数
5.ES6的箭头函数(重要)
使用=>来定义,function(){ } 等于()=> { }
一个参数不用加括号,也可以去掉大括号,返回值直接写。返回值是对象要加小括号。
小闭包
使用了箭头函数,就没有作用域链了。只能查找他上面的那个作用域链。
箭头函数没有this指向,箭头函数内部this值只能通过查找作用域链来得到。
所以这里定义的方法不要用箭头函数(比如init,若用了,则指里面这个this.doSomeThing的this变成指向window了
使用箭头函数的注意事项:
- 函数内部没有arguments
- 箭头函数不能使用new关键字来实例化箭头对象。function函数是一个对象,但箭头函数不是对象,他其实就是一个语法糖。
4.解构赋值
解构赋值是对赋值运算符的扩展,他针对数组和对象来进行操作,代码书写上简单易读
完全解构,不完全解构,可忽略
5.扩展的对象功能
属性名和属性值一样时才能这样
对象的方法:
is()用来解决=== 比较两个值是否严格相等的特殊情况。
NaN===NaN; //false
NaN.is(NaN); //true
assign() 对象的合并
这种assign,属于浅拷贝。
6.Symbol
原始数据类型,它表示独一无二的值。(内存地址不相等) 。
最大的用途:定义对象的私有变量。
怎么获取symbol声明的属性名
7.Map和Set
set表示无重复值的有序列表 (key,value)
arr:[1,2,3,4]
- set中对象的引用无法被释放
打印出来obj还在
Map
8.数组的扩展功能
数组的方法 from() 、of()
-
from将伪数组转换成真正的数组
-
of()将任意的数据类型转换成数组
-
copywithin()
-
9.迭代器
对于原生部署 Iterator 接口的数据结构,不用自己写遍历器生成函数,for…of循环会自动遍历它们。除此之外,其他数据结构(主要是对象)的 Iterator 接口,都需要自己在Symbol.iterator属性上面部署,这样才会被for…of循环遍历。
10.生成器
使用场景:为不具备Interator接口的对象提供了遍历操作
恢复当前yield执行传入的实参