一、let声明变量
1.let声明的变量不会挂在window中,不会造成全局变量的污染
2.新增了一个块级作用域{},以前只有函数作用域,全局作用域
3.let是不允许重复声明
4.let不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前临时性的死区中:Cannot access ‘num’ before initialization)
二、const声明常量
1.跟let完全相同 增加几个点
2.不允许被修改(不允许改变内存空间的地址)
3.const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址
三、字符串模板
在以前的字符串之上增加了一些功能
ES6中,可用${表达式}字符串进行拼接,可以添加串,可以使用转义字符,可以嵌套
四、解构
在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量
可以简化书写的长度,提升效率
五、展开运算符(…)
可以起到参数收集作用
1.收集符只能出现一次
2.一个函数,剩余参数收集只能在最后一个形参
运用在数组中,函数中 object是ES7新增的
六、默认值
参数默认值 可以传递表达式,不能传递语句
注意:只要给函数加上了参数默认值,该函数就自动变成严格模式
七、箭头函数
语法:箭头函数是一个函数表达式,理论上,任何使用函数表达式的地方都可以改成箭头函数
(参数1,参数2…) => {
函数体
}
1.对象调用函数,this指向对象
2.直接调用函数,this指向window
3.如果使用了new关键字,this指向新创建的对象
4.如果使用apply,call,bind this指向绑定的数据
5.如果是DOM事件函数,this指向事件源
箭头函数的写法
简写
1.如果参数只有一个,可以省略小括号
参数 => {}
2.如果箭头函数只有一条返回语句,可以省略花括号,可以省略return
参数 => 返回值
2.1 如果返回值是一个对象的时候,就会认为成函数体,把返回值变成表达式的形式
1.箭头函数中没有this,argument,new.target,如果要强行使用,则指向函数外层对应的this,argument,new.target
2.箭头函数没有原型,所有说占用空间非常小,不能当成构造函数来使用
八、类
1.类的声明不会被提升,和let const 一样,有临时性死区
2.类的所有代码全都是在严格模式中执行
3.类的所有方法都是不可枚举的
4.类的所有方法都无法当成构造函数直接使用
5.类的构造器必须使用new 来调用
九、symbol
1.没有字面量的写法
2.新的数据类型,typeof返回的是symbol
3.每次去调用Symbol函数得到的符号永远不会相等,不管符号描述是否相同
4.可以作为对象的属性名使用,这种属性名叫符号属性
5.符号属性不能被枚举
6.符号类型无法被隐式转换,数学运算,字符串拼接都是不行的
共享符号
Symbol.for(“符号描述”) 如果符号描述相等,则可以得到同一个符号
十、promise
ES6将程序分为了三种状态 pending resolved rejected
pending:挂起(等待) 处于未决阶段,表示事情还是在挂起,最后的结果没有出来
resolved:已处理 处于已决阶段,表示整个事情已经出现结果,并且可以按照正常的逻辑进行下去的结果
rejected:已拒绝 处于已决阶段,表示整个事情已经出现结果,并且是一个无法按照正常逻辑进行下去的结果
const pro = new Promise((resolve,reject) => {
未决阶段
通过调用resolve函数将promise推向已决阶段的resolve状态
通过调用reject函数将promise推向已决阶段的reject状态
resolve 和 reject 只能使用一个,如果使用了多个,也只有第一个有用
传递参数只能有一个,表示推向状态的数据
resolve({})
reject(456)
})
pro.then(data=>{
thenable函数,promise已经是已决阶段,resolve状态
},err => {
catchable reject状态
})
1.未决阶段的处理函数是同步的,会立即执行
2.thenable和catchable函数是异步的,就算会立即执行,也是会加入等待队列中,加入微队列
3.pro.then可以只添加thenable函数,pro.catch可以单独添加catchable函数
4.在未决阶段的处理函数中,如果发生未补获的错误,会将状态推向rejected,并且会被catchable捕获
5.一旦状态推向了已决阶段,无法再去做任何的改变