1,變量
Var 的缺陷
1-1枷畏,可以重復(fù)聲明,但是在C語言里面不可以虱饿;
1-2拥诡,無法限制修改,即無法設(shè)置常量氮发。在C語言里面是可以定義常量的渴肉,這個常量放在data區(qū)域,不能修改爽冕,但是var定義一個常量仇祭,是可以更改的;
1-3扇售,沒有塊級作用域前塔。在C語言里面{}就是塊,在塊里面定義的變量即使與塊外面的定義的變量一致承冰,那么也不會相互影響华弓。
ES6里面的定義變量關(guān)鍵字let和const
使用let無法重復(fù)聲明,使用const也無法重復(fù)聲明困乒,且不可修改寂屏。存在塊級作用域。
只要寫在{}里面娜搂,在{}外面調(diào)用的就報錯迁霎。
2,函數(shù)-箭頭函數(shù)
()當(dāng)只有一個參數(shù)的時候可以省去
只有一個return時百宇,可以省去{return}
3考廉,函數(shù)的參數(shù)
3-1,參數(shù)擴展和展開
收集參數(shù)携御,舉個栗子
function show(a,b,…args){}
show(1,2,3,4,5);
那么args=3,4,5
數(shù)組展開傳參昌粤,舉個栗子
function show(a,b,c){}
Show需要傳三個參數(shù)既绕,但是參數(shù)寫在了一個數(shù)組中
let arr = [1,2,3];
//此時可以用show(…arr);相當(dāng)于show(1,2,3);
展開數(shù)組的效果就跟直接把數(shù)組的內(nèi)容取出來傳參。
總之…能夠?qū)⒎蛛x的參數(shù)打包涮坐,也可以將打包好的參數(shù)解開成單個的參數(shù)凄贩,對于數(shù)組來說,說白了可以直接將方括號[]去掉袱讹。
3-2疲扎,默認參數(shù)
在函數(shù)里面的默認參數(shù)可以這樣寫:
show(a,b=2,c=10){
console.log(a,b,c)//1,2捷雕,10
}
4椒丧,解構(gòu)賦值
4-1,左右兩邊解構(gòu)必須一樣
舉個栗子
let [a,b,c] = [1,2,3]
let {a,b,c} = {a:1,b:2,c:3}
4-2非区,右邊必須是個合法的東西瓜挽,{1,2}就會報錯
4-3,聲明和賦值不能分開征绸,必須放在一起
舉個栗子
let [a,b];
[a,b] = [1,2]
這樣寫的話就會報錯
5久橙,數(shù)組
5-1,map映射管怠,一對一,返回數(shù)組
舉個栗子
let arr=[1,2,3]
let result = arr.map(item=>item*2)
let result = arr.map(item=>item>=1?’d大于1:’’小于1)淆衷;
5-2,reduce匯總 - 返回一個數(shù)而不是數(shù)組渤弛,如可以計算總數(shù)和 平均數(shù)
舉個栗子
let score = [100,101,102]
score.reduce((tmp, item, index)=>{
return tmp+item
} )
可以看到返回的是總數(shù)
5-3祝拯,filter過濾器,返回的是數(shù)組
舉個栗子
let arr=[1,2,3,4,5,6]
let result = arr.filter(item=>item%3==0);
返回被3整除的數(shù)字
5-4她肯,forEach 循環(huán)迭代
6佳头,字符串
6-1,多了兩個新方法
startWith和endWith
6-2晴氨,字符串模板
let a= 12
let str = `a${a}bc`//a12bc
7康嘉,面向?qū)ο?/h3>
7-1,class關(guān)鍵字籽前,構(gòu)造器和類分來了
7-2亭珍,class里面直接加方法
7-3,繼承枝哄,通過super來繼承
之前的類的寫法:
function User( ){
this.name = name;
this.age = age;
}
User.prototype.showName = function(){
console.log(this.name)
}
User.prototype.showAge = function(){
console.log(this.age)
}
var user1 = new User(‘張三’肄梨,21);
ES6對類的寫法:
class User{
constructor(name, age){
this.name = name;
this.age = age
}
showName(){
console.log(this.name);
}
showAge(){
console.log(this.age);
}
}
之前類的繼承:
function VipUser(name, age, gender){
User.call(this,name,age);
this.gender = gender;
}
VipUser.prototype = new User();
VipUser.prototype.constructor=VipUser;
VipUser.prototype.showGender = function(){
console.log(this.gender)
}
ES6的繼承
class VipUser extends User{
constructor(name,age,gender){
super(name, age);//繼承超類(繼承父類)
this.gender=gender
}
showGender(){
console.log(this.gender)
}
}
8挠锥,面向?qū)ο蟮膽?yīng)用
React - 強依賴于ES6面向?qū)ο?br>
8-1众羡,組件化,一個組件就是一個class
8-2蓖租,jsx語法
9粱侣,json
JSON.stringify變成字符串
JSON.parse()變成JSON
需要注意的是在轉(zhuǎn)換成JSON過程中辆毡,字符串的標準寫法
1,必須是雙引號
2甜害,所有名字都需要加雙引號
否則不能轉(zhuǎn)換成功
簡寫方法:
可以直接寫變量,只要json對象的key值和value名字一致就可以
如let a =12; let b=12;
但是此時需要傳一個json對象球昨,后端要求的對象屬性名也是a,b尔店,那么可以這樣寫:
let json = {a,b,c:32}
如果里面有函數(shù),那么可以省去:function
舉個栗子
let json = {
a:1,
show(){
alert(this.a)
}
}
10主慰,promise函數(shù)
ES6自帶promise嚣州,需要的時候通過new來創(chuàng)建。
注意promise.all 和promise.race的使用和區(qū)別
但是也有缺點共螺,比如好幾個請求互相之間有邏輯關(guān)系该肴,那么此時的promise就不適用了,寫法和jQuery的ajax一樣都是在嵌套藐不。此時就需要用到generator函數(shù)匀哄。
11,generator-生成器
是一個特殊的函數(shù)雏蛮,普通函數(shù)一路執(zhí)行到底涎嚼,generator函數(shù)中間可以停止,使用關(guān)鍵字yield
適用場景:當(dāng)我們發(fā)起請求1后的結(jié)果作為請求2的參數(shù)再發(fā)起請求挑秉,請求2的結(jié)果要作為請求3的參數(shù)法梯。使用generator就可以優(yōu)雅的寫成同步式的代碼,避免多層嵌套犀概。但是這個生成器使用的時候要借助外部庫runner立哑。ES7里面將這個函數(shù)改成了async await。使用時不再利用第三方庫或者封裝generator了姻灶☆醮拢可以優(yōu)雅的將異步的代碼寫成同步方式。
舉個栗子
function getCode(){
return axios.get('json/code.json');
}
function getlist(params){
return axios.get('json/person.json',{params})
}
getlist的Parmas參數(shù)要用到getcode請求的結(jié)果木蹬,常規(guī)做法如下:
function getFinal(){
console.log("我是getFinal函數(shù)")
getCode().then(function(res){
if(res.data.code == 0){
console.log(res.data.code);
var params = {
code:res.data.code
}
getlist(params).then(function(res){
if(res.data.code == 0){
console.log(res.data.list);
}
})
}
})
}
getFinal();
但是使用async和await可以這樣寫:
async function getResult(){
let code = await getCode();
console.log(code.data.code);
if(code.data.code == 0){
var params = {
code:code.data.code
}
let list = await getlist(params);
console.log(list.data.list);
}
}
getResult();
12至耻,set函數(shù)
Set是為了構(gòu)建某一類型對象,所以也叫構(gòu)造函數(shù)镊叁。 - 對象的實例化尘颓。
set本身的方法:
- size()-對象的長度;
- clear()-清空所有項晦譬;
- delete(var)-清空某項值疤苹,不是下標;
- add(var)-添加不重復(fù)的值敛腌;
- has(var)-是否包含某項值卧土。
注意:可以鏈式調(diào)用
應(yīng)用:
數(shù)組去重惫皱,舉個栗子
let a = [2,1,2,1,3,5,6,5]
let b = new Set(a);
console.log(b)//[2,1,3,5,6]
但是這是一個set對象,不是數(shù)組尤莺,所以需要進行轉(zhuǎn)換
let c = [...b]