ES6
ES5常見的數(shù)組方法(迭代/遍歷數(shù)組)
- forEach() : 缺點(diǎn): 不能使用break和continue
- map() : (映射):遍歷數(shù)據(jù)并返回一個(gè)新的數(shù)組,對(duì)數(shù)的處理會(huì)返回原先對(duì)應(yīng)的位置
- filter() : 過濾,返回復(fù)合條件的數(shù)據(jù) return true,則是吧當(dāng)前真的數(shù)據(jù) 存入新的數(shù)組 否則不存
- some() : 如果有復(fù)合條件的記錄含鳞, 則返回真添吗,否則返回假
- every(): 如果每一個(gè)數(shù)據(jù)都復(fù)合條件媒峡,則返回真大诸,否則返回假
- reduce(): 常用來實(shí)現(xiàn)累加的
let arr = [300,600,200,100]
// 首次調(diào)用時(shí),sum是第一個(gè)元素,val是第二個(gè)元素等太,index是1
// 再次調(diào)用時(shí),sum是上一次return的結(jié)果蛮放,val依次是下一個(gè)元素
let result = arr.reduce((sum,val,index)=>{
console.log(sum,val,index);
return sum + val;
})
console.log(result);
//第二個(gè)參數(shù)是sum的初值缩抡,則第一次調(diào)用 時(shí),val是第一個(gè)元素
let result = data.list.reduce((sum,val,index)=>{
return sum + val.price;
},0)
console.log(result);
let - const
ES5作用域:全局作用域包颁,函數(shù)作用域(局部作用域)
ES6
let: (1)定義塊級(jí)作用域 {} (2)在同一塊級(jí)作用域不能重復(fù)聲明
const: 定義常亮 (1)聲明必須負(fù)值 (2)不允許更改
箭頭函數(shù)
箭頭函數(shù)的語(yǔ)法 : ()=>{}
- 箭頭函數(shù)中的this指向:指向定義它的函數(shù)的this
- 沒有參數(shù)可以寫 ()=>{} ; -- 有一個(gè)參數(shù)可以寫 item=>{}; -- 只有一條return語(yǔ)句瞻想,可以不寫{} let fun = ()=>1;
類和繼承
class Parent {
// 等同es5中的構(gòu)造函數(shù)
constructor(name,age){
this.name = name;
this.age = age
}
//等同es5中向原型對(duì)象添加方法
run(){
console.log("run")
}
}
class Child extends Parent{
constructor(name,age,grade){
//相當(dāng)于調(diào)用父類的構(gòu)造函數(shù)
super(name,age)
this.grade = grade;
}
study(){
console.log('study')
}
}
let c1 = new Child('Jack',23,'六');
console.log(c1)
ES6對(duì)象字面量的簡(jiǎn)寫 屬性名和屬性一樣的話可以直接寫obj{name,age}
模板字符串模板字符串的寫法和拼接:
<p>內(nèi)容:${變量}</p>
結(jié)構(gòu)賦值 : 對(duì)象的 let {name,age} = obj 數(shù)組的 let [num1,num2] = arr
展開運(yùn)算符: [...arr1] 等價(jià)于: 把a(bǔ)rr1中的元素一個(gè)一個(gè)拿出來,放到新的數(shù)組中
默認(rèn)參數(shù)和剩余參數(shù)
ES5的默認(rèn)參數(shù): function(a){ a = a || 12 }
ES6的默認(rèn)參數(shù): 可以直接在參數(shù)的后面加上 function(a=12){} ---有是有多個(gè)參數(shù)的話默然參數(shù)必須寫在最后面
剩余參數(shù)
// ===================剩余(rest)參數(shù): 得到所有的實(shí)參娩嚼,等同于es5中 arguments,
function total(...a){
// ES5:
// console.log(arguments) //偽數(shù)組
// args: 真數(shù)組
// console.log(args instanceof Array);
console.log(a);
}
total(23,45)
Symbol數(shù)據(jù)類型
Symbol: 獲取唯一不會(huì)重復(fù)的變量蘑险,是ES6新增的數(shù)據(jù)類型
set
set: 是ES6中新增的集合的數(shù)據(jù)類型,用來存放數(shù)組岳悟。但是佃迄,數(shù)組的元素不允許重復(fù)
set 可以用for..each 遍歷 不能使用數(shù)組對(duì)象的方法map()...
ES6使用set的數(shù)組去重
let arr = [1,2,3,5,1,2,1]
let result = [...new set(arr)]
// set的聲明:
let set = new Set([1,2,3,4]);
for..of語(yǔ)句
遍歷語(yǔ)句:
- forEach: (1) 可以遍歷對(duì)象以外的集合 (數(shù)組,Set) (2)不能使用break和continue
- for...in (1)遍歷對(duì)象 (2)不能直接訪問對(duì)象的屬性值
- ES6新增的for...of: (1)可以用于部署了Symbol.iterator的對(duì)象(自定義的對(duì)象不能使用for...of,但大部分原生的數(shù)據(jù)集合都可以使用)
(2)可以使用break和continue
iterator迭代器
- 是一個(gè)函數(shù)
- 可以統(tǒng)一處理所有集合數(shù)據(jù)
- 返回一個(gè)next方法贵少,調(diào)用next之后會(huì)返回一個(gè)包含兩個(gè)屬性的對(duì)象 {value:'',done:true}
- iterator是專供for...of來消費(fèi)的
Object.keys方法
Object.keys(): 返回指定對(duì)象所有屬性名組成的數(shù)組
Map類型的數(shù)據(jù)
Map: 類似與對(duì)象呵俏,用來存儲(chǔ)鍵值對(duì)。
對(duì)象只能使用字符串作為屬性名春瞬,而Map可以使用任意類型的數(shù)據(jù)做為屬性名
let map = new Map([["a",1],["b",2]]) //map聲明 輸出{"a"=>1,"b"=>2}
- map的Apl
屬性: size 和length一樣是代表長(zhǎng)度的
方法:- set: 添加 map.set("name","alice"); 給map添加了name=>alice
- get: 讀取 console.log(map.get("a")) 讀取map里面a的屬性 輸出 1
- has: 查找有沒有該屬性 有則為真 則為假
- delete: 刪除某個(gè)屬性
- clear: 清除所有屬性
//============================================for...of遍歷
// 獲取屬性名
// for(let key of map.keys()){
// console.log(key)
// }
// 獲取值
// for(let val of map.values()){
// console.log(val)
// }
// 同時(shí)獲取鍵值
// for(let i of map){
// console.log(i)
// }
// 等同于
// for(let i of map.entries()){
// console.log(i[0])
// console.log(i[1])
// }
// for(let [key,value] of map.entries()){
// console.log(key)
// console.log(value)
// }
// let obj = {
// name: 1,
// age: 2
// }
// delete obj.age
// console.log(obj)
Promise
promise是什么
1柴信、主要用于異步計(jì)算
2、可以將異步操作隊(duì)列化宽气,按照期望的順序執(zhí)行随常,返回符合預(yù)期的結(jié)果
3潜沦、可以在對(duì)象之間傳遞和操作promise,幫助我們處理隊(duì)列
為什么會(huì)有promise绪氛?
為了避免界面凍結(jié)(任務(wù))
同步:假設(shè)你去了一家飯店唆鸡,找個(gè)位置,叫來服務(wù)員枣察,這個(gè)時(shí)候服務(wù)員對(duì)你說争占,對(duì)不起我是“同步”服務(wù)員,我要服務(wù)完這張桌子才能招呼你序目。那桌客人明明已經(jīng)吃上了臂痕,你只是想要個(gè)菜單,這么小的動(dòng)作猿涨,服務(wù)員卻要你等到別人的一個(gè)大動(dòng)作完成之后握童,才能再來招呼你,這個(gè)便是同步的問題:也就是“順序交付的工作1234叛赚,必須按照1234的順序完成”澡绩。
異步:則是將耗時(shí)很長(zhǎng)的A交付的工作交給系統(tǒng)之后,就去繼續(xù)做B交付的工作俺附,肥卡。等到系統(tǒng)完成了前面的工作之后,再通過回調(diào)或者事件事镣,繼續(xù)做A剩下的工作步鉴。