JavaScript ES6新增语法相关个人总结(三)

Promise基础

- 基本语法

代码例:

// 实例化Promise对象
const p = new Promise(function(resolve, reject){
  setTimeout(function(){
	let data = '请求成功的数据'
	// 请求成功,调用resolve
	resolve(data)
	
	// let err = '请求失败'
	// 请求失败,调用reject
	// reject(err)
  }, 1000)
})

// 调用Promise对象的then方法
p.then(function(res){
  console.log(res) // '请求成功的数据'
}, function(err){
  console.log(err) // '请求失败'
})

- then方法

then方法会返回一个Promise对象,该Promise对象内有两个属性

  • PromiseState 状态
  • PromiseResult 返回值
    `

根据then方法回调函数中返回的结果不同,这两个属性的返回值也不同

  • 返回的结果是非Promise类型的属性,状态为成功,返回值为对象的成功的值
  • 返回结果是Promise对象,这两个值则由该Promise对象的回调结果决定
  • 抛出错误(throw),状态为失败,返回值为throw的内容

代码例:

// 实例化Promise对象
const p = new Promise((resolve, reject)=>{
  setTimeout(()=>{
	resolve('成功数据')
  }, 1000)
})

// then方法的回调结果是一个Promise对象,由result接收
const result = p.then(res=>{
  console.log(res)
  // 1.返回非Promise类型的属性
  // return 123
  
  // 2.返回Promise对象
  // return new Promise((resolve, reject)=>{
  // 	resolve('ok')
  // 	reject('error')
  // })
  
  // 3.抛出错误
  // throw '出错了!'
})

console.log(result)
// Promise{
//   [[PromiseState]]
//   [[PromiseResult]] 
// }

- 链式调用

代码例:

// 实例化Promise对象
const p = new Promise((resolve, reject)=>{
  setTimeout(()=>{
  	resolve('成功')
  },1000)
})

// 由于then方法的回调结果是一个Promise对象
// 可以依靠该特性,进行链式调用
p.then(res=>{
  ...
}).then(res=>{
  ...
}).then(...)

- catch方法

catch方法相当于then方法的一个语法糖,负责捕捉Promise回调的reject部分

代码例:

// 实例化Promise对象
const p = new Promise((resolve, reject)=>{
  setTimeout(()=>{
  	reject('失败')
  },1000)
})

// then方法回调reject
// p.then(res=>{}, err=>{
//   console.log(err) // '失败'
// })

// catch方法
p.catch(err=>{
  console.log(err) // '失败'
})

Set(集合)

ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历

代码例:

// 声明一个set
let s = new Set()
// set内传参往往传入一个数组
let s2 = new Set([1,2,3,4,1,2,3])
// size 返回元素个数
console.log(s2.size) // 4
// add 增加一个新元素
// s2.add(5)
// delete 删除元素,返回值为Boolean
// s2.delete(1)
// has 检测集合中是否包含某个元素,返回值为Boolean
// s2.has(7)
// clear 清空集合,返回undefined
// s2.clear()

for(let item of s2){
  console.log(item) // 依次输出 1 2 3 4
}

- Set相关应用

代码例:

let arr = [1,2,3,4,5,4,3,1,2]
// 数组去重
let res = [...new Set(arr)]
console.log(res) // [1,2,3,4,5]

// 数组求交集
let arr2 = [4,5,5,6,7,5,4]
let res2 = res.filter(item => new Set(arr2).has(item))
console.log(res2) // [4,5]

// 数组并集
let res3 = [...new Set([...arr, ...arr2])]
console.log(res3) // [1,2,3,4,5,6,7]

// 数组差集(arr里有哪些是arr2里没有的)
let res4 = res.filter(item => !(new Set(arr2).has(item)))
console.log(res4) // [1,2,3]

Map数据结构

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。
`
相当于升级版的对象

代码例:

// 声明 Map
let m = new Map()

// 添加元素
m.set('name','sky')
m.set('fn', function(){
  console.log('fn')
})
let key = {age: 18}
let value = [1,2,3]
m.set(key, value)

// size 返回Map的元素个数
console.log(m.size) // 3

// get 返回键名对象的键值
console.log(m.get(key)) // [1,2,3]

// has 检测Map中是否包含某个元素,返回Boolean值
console.log(m.has('fn')) // true

// delete 删除某个元素,返回Boolean值
// m.delete('name')

// clear 清空
// m.claer()

// 遍历Map对象
for(let item of m){
  console.log(item) // 每个元素都是数组,由键名和键值组成
}


- Recorded by Scorpio_sky@2021-01-18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值