文章目录
ES6的新增的方法
一、新增的 let 和 const
在 es6 中通常使用 let 和 const 来声明,let 表示变量,const 表示常量
1.1 特点
let 和 const 都是块级作用域,是以 {}
代码块作为作用域范围,只能在代码块里面内使用,不存在变量提升,只能先声明再使用,不能重复声明
const 声明是一个常量,在声明的时候必须赋值,而且是不能改变的(如果是一个对象,对象包含的属性可以进行更改,就是说对象所指向的地址不变,而变量成员是可以改变的)
补充:在js中,数据类型分为两种,基本数据类型和引用类型
普通数据类型有Number,String,Boolean,Null,Undefined五种
引用数据类型有:Function,Object,Array
对象是引用类型,当对象的内容发生改变,对象所指向的地址也不会改变
二、模板字符串
在es6中引入了模板字符串的概念,用 ``
来进行标识,也可以作为普通字符串来使用,也可以定义多行字符串,在字符串内可以嵌套变量,js表达式,函数,但变量,js表达式,函数需要写到 ${}
中
三、函数的扩展
3.1 可以给函数参数赋默认值
在定义函数的时候,给参数赋默认值,在不传参数的时候,使用这个默认值
3.2 箭头函数
写法 (参数)=>{...}
,当函数体只有一句代码时,连 {}
都可以省去,只有一个形参时,()
可以省去
特点:在箭头函数里,它没有自己的this,它的 this 是指向父级函数,没有的话指向的是 window
四、对象的扩展
4.1 属性的简写
如过对象的键值对变量名相等时,可以进行简写,只写一个
var name = 'xxx';
var person = {name}; // 等同于var person = {name : name}
4.2 Object.keys()
获取对象的所有属性名,并返回一个数组
4.3 Object.assign()
对多个对象进行合并,以第一个对象为目标将新的属性加到第一个对象上,如果合并的对象有相同的属性,后面的会覆盖前面的
五、for of 循环
var arr = [1,2,3,4];
for (var i of arr){
console.log(v); // 1/2/3/4
}
六、import 和 export
在es6中原生js支持模块化,import
为加载模块,export
为导出模块,import
和 export
只能在模块的顶部不能在模块中
使用 export
导出的模块,在导入的时候加上{}
,名字也要和导出的模块名字一致
使用 export default
默认导出时,在导入命名的时候可以随意命名,需要注意的是,在一个js文件中只能有一个默认导出
七、Promise 对象
Promise 对象是一种异步编程的解决方案,将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数,专注于解决异步处理的回调地狱问题。
Promise 构造函数带有一个 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切正常调用 resolve() 否则使用 reject(),已经实例化化过的 Promise 对象可以调用 promise.then() 方法接受两个参数:onResolve 和 onReject,分别代表当前 Promise 对象在成功时和失败时的回调函数。
7.1 Promise的基本使用
const promise = new Promise((resove,reject)=>{
if (...) {
resove() // 代码正常
}
else {
reject() // 代码错误
}
});
promise.then((res) => {
//代码走了resove()执行这里
},(err) => {
//代码走了reject()执行这里
})
注意:除了在then里可以捕获错误时回调,还可以使用catch()。代码如下:
const promise = new Promise((resove,reject)=>{
if(...) {
resove() // 代码正常
}
else {
reject() // 代码错误
}
});
promise.then((res) => {
//代码走了resove()执行这里
}).catch((err) => {
//代码走了resove()执行这里
})
7.2 promise 的三种状态
Fulfilled 为成功的状态,Rejected 为失败的状态,Pending 是初始状态
在Fulfilled 状态下,会调用 then 方法,在 Rejected 状态下会调用 catch 方法
7.3 promise 的其他两个方法
promise.all()
Promise.all([p1, p2, p3])
用于将多个 promise 实例,包装成一个新的 promise 实例,返回的实例就是普通的 promise
它接收一个数组作为参数
当接收的全部 promise 状态都为 Fulfilled 的时候,返回的 promise 状态才为 Fulfilled,执行 then,如果有一个为 Rejected,就执行 catch,返回的是发生第一个 Rejected 的 promise 的结果
promise.race()
类似于Promise.all()
,区别在于它有任意一个完成就算完成
八、解构赋值
解构赋值是对赋值运算符的扩展,针对对象或数组进行模式匹配,对其中变量赋值。注意要一一对应,如果有对应不上的值,它的值就是 undefined
8.1数组的解构赋值
let [a, b, c] = [1, 2, 3]; //a ==1, b == 2, c == 3
8.2对象的结构赋值
let {a, b} = {a:11, b:22}; // a == 11, b == 22
九、Set数据结构
set数据结构类似于数组,所有的值都是唯一的,没有重复的值,它本身就是一个数据结构,可以用于数组去重
十、class
在es6中,不像es5一样使用原型加构造函数实现继承,而是引入了 class 的概念,写法更简单,更容易实现继承
十一、展开运算符(…)
展开运算符可以将对象或数组里面的值进行展开,整合到一个变量
十二、Async,Await
使用async,await,搭配promise,可以通过编写形似同步的代码来实现异步流程,async用于申明一个异步函数,而await用于等待一个异步方法执行完毕
十三、Symbol
Symbol:新的数据类型,表示一个不可重复的值,不是函数,不能通过 new 创建
作用:定义不会重名的变量;定义常量;内置 Symbol 的值( Symbol.iterator (返回容器的迭代器方法),需要使用reflect来遍历获取所有的属性)