ES6總結(jié)(let,const,變量解構(gòu),模板字符串,對(duì)象簡(jiǎn)寫,箭頭函數(shù),三點(diǎn)運(yùn)算,形參默認(rèn)值)

一、let和const關(guān)鍵字:

ES6聲明變量就是防止變量在未聲明時(shí)使用,如果在變量未聲明之前使用就會(huì)報(bào)錯(cuò)

let作用:與var類似,用于聲明一個(gè)變量

特點(diǎn):在塊作用域內(nèi)有效、不能重復(fù)聲明、不會(huì)預(yù)處理,不存在變量提升

應(yīng)用:循環(huán)遍歷加監(jiān)聽

const作用:定義一個(gè)常量

特點(diǎn):不能修改、其它特點(diǎn)同let

應(yīng)用:保存不用改變的數(shù)據(jù)

二、變量的解構(gòu)賦值:

解構(gòu)就是先解析你的結(jié)構(gòu)然后再進(jìn)行賦值,從對(duì)象或數(shù)組中提取數(shù)據(jù),并賦值給變量(多個(gè)),你要的東西都得是對(duì)象或者數(shù)組里面有的屬性名,屬性名可以不用全部都要。

對(duì)象的解構(gòu)賦值:

let {n,a}={n:'gmx',a:18}

那么n拿到的就是gmx,a拿到的就是18,如果你這樣拿:let{n,x}={n:'gmx',a:18},就會(huì)拿到一個(gè)undefined,因?yàn)閷?duì)象里面沒(méi)有x這個(gè)屬性名,你要的東西我沒(méi)有,我就undefined,你可以少拿也可以全拿,但是你不能拿我沒(méi)有的東西,就這樣很簡(jiǎn)單。

數(shù)組的解構(gòu)賦值:

let[a,b]=[1,'gmx']

a拿到的是1,b拿到的是gmx,數(shù)組解構(gòu)賦值其實(shí)就是根據(jù)你所占的位置去拿對(duì)應(yīng)的值,a在數(shù)組里面對(duì)應(yīng)的下標(biāo)為0,那么1的也是0,所以a拿到的就是1。

數(shù)組還可以這樣:

let? arr=[1,2,4,5,'abc','bdg'];? //我就想拿字符串怎么辦?

let [,,,,a,b]=arr;? ? ?//這樣就可以了,多加4個(gè)逗號(hào)就是多占4個(gè)位置,相當(dāng)于前4個(gè)我不要,我就要后2個(gè)。

應(yīng)用:

funtion foo(obj){

? ? ? ?console.log(obj.name,obj.age);? ??

}?

上面函數(shù)可以寫成下面這種形式:

function foo({name,age}){? //{name,age}=obj

? ? ?console.log(name,age);

}

相當(dāng)于在接收參數(shù)這個(gè)過(guò)程中就已經(jīng)進(jìn)行過(guò)一次解構(gòu)賦值了,可以直接使用。

三、模板字符串:

模板字符串的作用:簡(jiǎn)化字符串的拼接

模板字符串必須用``包含

變化的部分使用${xxx}定義

例:

let obj={username:'gmx',age:18};

let str='我的名字叫:'+obj.username+',我今年的年齡是:'+obj.age;? ? //以前字符串拼接

str=`我的名字叫:${obj.username},我今年的年齡是:${obj.age}`;? ?//現(xiàn)在模板字符串

//兩種輸出是一樣的,但是第二種模板字符串比第一種編寫起來(lái)效率要高,不容易出錯(cuò)

四、對(duì)象的簡(jiǎn)寫方式:

簡(jiǎn)化的對(duì)象寫法:省略同名的屬性值、省略方法的function

以前的寫法:

let username='gmx';

let age=18;

let obj={

? ? ?username:username,

? ? ?age:age,

? ? ?getName:function(){

? ? ? ? ? return this.username;

? ?}

}

現(xiàn)在簡(jiǎn)化后:

let username='gmx';

let age=18;

let obj={

? ? username,? ?//同名屬性可以省略不寫

? ? age,

? ? ?getName(){? ? //可把:function省略不寫

? ? ? ? ? return this.username;

}

}

以上兩種方法輸出的obj和obj.getName()是一樣的,只是同名屬性才可省略不寫。

五、箭頭函數(shù)詳解:

作用:定義匿名函數(shù)

箭頭函數(shù)的特點(diǎn):

簡(jiǎn)潔

箭頭函數(shù)沒(méi)有自己的this,箭頭函數(shù)的this不是調(diào)用的時(shí)候決定的,而是在定義的時(shí)候處在的對(duì)象就是它的this

擴(kuò)展理解:箭頭函數(shù)的this看外層的是否有函數(shù),如果有,外層函數(shù)的this就是內(nèi)部箭頭函數(shù)的this,如果沒(méi)有,則this是window。

基本語(yǔ)法:

沒(méi)有參數(shù):() => console.log('xxx')

let fun=function(){console.log("我是箭頭函數(shù)")}

可寫成:let fun=() =>console.log("我是箭頭函數(shù)");

一個(gè)參數(shù):i => i+1

let? fun=function(a){console.log(a)}

可寫成:let? fun= a =>console.log(a);? //只有一個(gè)形參的時(shí)候,()可要省略

大于一個(gè)參數(shù):(i,j) => i+j

let? fun=function(x,y){console.log(x,y)}

可寫成:let? fun=(x,y)=>console.log(x,y); //當(dāng)兩個(gè)以及兩個(gè)以上的形參的時(shí)候 ()不能省略

函數(shù)體不用大括號(hào):默認(rèn)返回結(jié)果

函數(shù)體只有一條語(yǔ)句或者表達(dá)式的時(shí)候,{}可以省略----》省略會(huì)自動(dòng)返回語(yǔ)句執(zhí)行的結(jié)果或者是表達(dá)式的結(jié)果

let fun=(x,y)=>x+y;

console.log(fun(20,30)); //結(jié)果為50

注意:如果以上x+y表達(dá)式加上{}后,會(huì)輸出undefined,如果非得有值要返出去,就得{return x+y}這樣子了。

函數(shù)體如果有多個(gè)語(yǔ)句,需要用{}包圍,{}不可以省略,若有需要返回的內(nèi)容,需要手動(dòng)返回

let? fun=(x,y) => {

? ? ? console.log(x,y);

? ? ? return x+y;? ?//需要返回的內(nèi)容必須手動(dòng)返回

}

使用場(chǎng)景:多用來(lái)定義回調(diào)函數(shù)

測(cè)試箭頭函數(shù)的this:

let btn1=document.getElementById("btn1");

let btn2=document.getElementById("btn2");

btn1.onclick=function(){

? ? alert(this);? //輸出按鈕對(duì)象

}

btn2.onclick=()=>{

alert(this);?//輸出window對(duì)象,它外層沒(méi)函數(shù)所以this就是window,如果外層有函數(shù),那么this就和外層函數(shù)的this一樣

}

坑:

let obj={

? name:'箭頭函數(shù)',

? getName:() => {

? ? ?btn2.onclick= () => {

? ? ? ? console.log(this);? //this是window對(duì)象,因?yàn)閮?nèi)層箭頭函數(shù)會(huì)看自己外層有沒(méi)有函數(shù),一看,外層居然也是一個(gè)箭頭函數(shù),靠 不住了,然后外層箭頭函數(shù)說(shuō),兄弟別走,我?guī)闳フ液瘮?shù),結(jié)果都沒(méi)找著函數(shù),所以都指向window了。

? ? ? ? ? ? ? ? ? }

? ? ? ? }

}

六、三點(diǎn)運(yùn)算符

rest(可變)參數(shù)

用來(lái)取代arguments,但比arguments靈活,只能是最后部分形參參數(shù)

使用arguments:

function foo(a,b) {

? console.log(arguments);

}

foo(3,4);

arguments.callee()指函數(shù)本身。

如果使用數(shù)組方法forEach去遍歷偽數(shù)組arguments:

function foo(a,b) {

? // console.log(arguments);

? arguments.forEach(function (item, index) {

? ? console.log(item,index);

? })

}

foo(3,4);

這樣就會(huì)報(bào)錯(cuò),因?yàn)閍rguments是偽數(shù)組,不具備數(shù)組的一般方法。

這時(shí)候,ES6就提出了一個(gè)點(diǎn)點(diǎn)點(diǎn)運(yùn)算符,看下面:

function foo(...value) {? //三個(gè)點(diǎn)是它的特征

? console.log(arguments);? //偽數(shù)組

? console.log(value);? //真數(shù)組,輸出時(shí)就不用寫...

}

foo(3,4);

結(jié)果如下:

所謂真數(shù)組,也就能使用數(shù)組的所有方法了,那么forEach就不會(huì)報(bào)錯(cuò)了。

再比如:

function foo(a,...value) {? //此時(shí)a作為一個(gè)占位符,將帶走一個(gè)實(shí)參,value就表示剩余部分的數(shù)組元素

? console.log(a);? //3

? console.log(value);? //[4,5,6,7]

}

foo(3,4,5,6,7);

如果這樣就會(huì)報(bào)錯(cuò):

function foo(a,...value,b) { //...value只能放在當(dāng)前最后位置,所以這樣寫是會(huì)報(bào)錯(cuò)的

? console.log(a);

? console.log(value);

? console.log(b);

}

foo(3,4,5,6,7);

實(shí)例:

let arr=[1,3,5];

let arr1=[2,...arr,6]; //...arr代表[1,3,5],此時(shí)arr1為[2,1,3,5,6]

arr1.push(...arr);? ? //此時(shí)arr1為[2,1,3,5,6,1,3,5]

console.log(arr1)? //[2,1,3,5,6,1,3,5]

七、形參默認(rèn)值

先來(lái)一個(gè)實(shí)例:

// 定義一個(gè)點(diǎn)的坐標(biāo)

function point(x,y) {

? this.x=x;

? this.y=y;

}

let point1=new point(4,5);

console.log(point1);? //point {x: 4, y: 5}

如果在new的時(shí)候忘記傳參了:

let point2=new point();

console.log(point2);? //point {x: undefined, y: undefined}

此時(shí),就會(huì)出現(xiàn)Undefined,那么就想如果傳參就指定我傳的參數(shù)值,如果我不傳參,就指定默認(rèn)值。

// 定義一個(gè)點(diǎn)的坐標(biāo)

function point(x=0,y=0) {

? this.x=x;

? this.y=y;

}

let point1=new point(4,5);

console.log(point1);? //point {x: 4, y: 5}

let point2=new point();

console.log(point2);? //point {x: 0, y: 0}

這就是形參默認(rèn)值,你指定值,那么就是你的值,你不指定值,那么就用我默認(rèn)的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容