提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、Set数据结构(里面放的都是数组,主要用于去重)
里面放的都是数组,主要用于去重
1、数组的 Set
// 声明
let arr = ['ysq','999','今天是冬至','1',1]
let setArr = new Set(arr) // Set(5) {"ysq", "999", "今天是冬至", "1", 1}
// 新增 add
setArr.add('今天是冬至') // Set(5) {"ysq", "999", "今天是冬至", "1", 1}
// 查找 has
setArr.has('今天是冬至') // true
// 长度 size
setArr.size // 5
// 删除 delete(),clear()
setArr.delete('今天是冬至') // Set(4) {"ysq", "999", "1", 1}
// 循环 遍历 for...of... forEach
// set 没有下标,下标就代表自己
for(let [index,item] of setArr.entries()){
console.log(index,item)
// ysq ysq
// 999 999
// 1 1
// 1 1
}
setArr.forEach((element,index) => {
console.log(element,index)
// ysq ysq
// 999 999
// 1 1
// 1 1
})
2、对象的WeakSet
let obj = {a:123,b:789}
let obj2 = {a:123,b:789}
let weakObj = new WeakSet()
weakObj.add(obj)
weakObj.add(obj2)
console.log(weakObj)
// WeakSet {{…}, {…}} 此时 obj和obj2是两个栈里面属于互不相关所以weakObj出现两个对象
const obj = {a:123,b:789}
const obj1 = obj
const weakObj = new WeakSet()
weakObj.add(obj)
weakObj.add(obj1)
console.log(weakObj)
// WeakSet {{…}} 此时obj1赋值等于obj属于同一个栈内
二、Map数据类型
由于ES5的Object提供的hash(键值对)里只能用字符串当作键,会有很大的限制。所以ES6提供了更接近hash结构Map
let objMap = {
a:'ysq',
b:'sunshine'
}
let map = new Map()
// 增 set
map.set(objMap,'item') // (key值,value值)
map.set('ysq',objMap) // Map(2) {{…} => "item", "ysq" => {…}}
// 取值 get
map.get(objMap) // get(key值) //item
// 删 delete
map.delete(objMap) // Map(1) {"ysq" => {…}}
// 查 has
map.has('ysq') // true
// 长度 size
map.size // 1
三、promise对象
常见的异步请求有:1、接口调用,2、定时器,3、事件函数
注:在ES5中,当进行多层嵌套回调时,会导致代码层次过多,很难进行维护和二次开发;而且会导致回调地狱的问题。ES6中的Promise 就可以解决这两个问题。
1、promise的基本用法
- 实例化一个Promise对象,Promise的构造函数中传递一个参数,这个参数是一个函数,该函数用于处理异步任务、
- 传入两个参数:resolve和reject,分别表示异步执行成功后的回调函数,和异步执行失败后的回调函数
- promise.then()处理返回结果
let state = 1
function abc(){
// model层的接口封装
return new Promise((resolve,reject)=>{
// 这里做异步请求 ajax接口请求,定时器异步请求
if(state==1){
resolve('')
}else{
reject('')
}
})
}
// 业务层 接口调用
abc().then(data=>{
console.log(data)
}).catch(err=>{
console.log(err)
})
//*************************转载例子******************************************//
// 第一步:model层的接口封装
const promise = new Promise((resolve, reject) => {
// 这里做异步任务(比如ajax 请求接口。这里暂时用定时器代替)
setTimeout(function() {
var data = { retCode: 0, msg: 'qianguyihao' }; // 接口返回的数据
if (data.retCode == 0) {
// 接口请求成功时调用
resolve(data);
} else {
// 接口请求失败时调用
reject({ retCode: -1, msg: 'network error' });
}
}, 100);
});
// 第二步:业务层的接口调用。这里的 data 就是 从 resolve 和 reject 传过来的,也就是从接口拿到的数据
promise.then(data => {
// 从 resolve 获取正常结果
console.log(data);
}).catch(data => {
// 从 reject 获取异常结果
console.log(data);
});
四、模块化操作
1、引入 import
2、输出 export ,export default
export 和export default区别:
export:多变量输出,可以输出多个变了
文件一、
export const a = 'ysq'
export const function add(){
return a+b
}
文件二、(花括号)
import {a,add} from ',/,,'
export default:在文件中只能有一个文件输出
文件一、
export default var a = 'ysq'
文件二、(不需要花括号且import可以自由命名)
import adc from './..'
总结
提示:这里对文章进行总结: