国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

常用ECMAScript6語(yǔ)法歸納

raledong / 3359人閱讀

摘要:對(duì)象的解構(gòu)賦值函數(shù)執(zhí)行后,返回的是一個(gè)對(duì)象。分別取出對(duì)象中屬性為和的值,根據(jù)解構(gòu)賦值的規(guī)則,在左側(cè)聲明變量,放在大括號(hào)中,變量名要和屬性名保持一致。箭頭函數(shù)在中,箭頭函數(shù)就是函數(shù)的一種簡(jiǎn)寫(xiě)形式允許使用箭頭定義函數(shù)。

原文博客地址,歡迎學(xué)習(xí)交流:點(diǎn)擊預(yù)覽
聲明變量

可以使用letconst關(guān)鍵字聲明變量,而不推薦使用var聲明變量

var聲明變量的問(wèn)題:

可以多次重復(fù)聲明同一個(gè)變量名,存在覆蓋的風(fēng)險(xiǎn)

在全局聲明的變量會(huì)掛在全局對(duì)象上

var不能形成塊級(jí)作用域,例如:if、for范圍外依然可以使用var聲明的變量

var聲明的變量具備變量提升(hoisting)特性--- 允許使用在前,聲明在后

var存在很多問(wèn)題,let橫空出世。

let允許創(chuàng)建塊級(jí)作用域,let聲明的變量只在它所在的代碼塊內(nèi)有效

{
  let test = 10;
  var foo = 1;
}

console.log(test) // ReferenceError: miaov is not defined.
console.log(foo) // 1

if中使用:

if(false){
  let test = 10;  // 只在這個(gè)代碼塊內(nèi)有效,形成了塊級(jí)作用域
  var foo = 1;
}

console.log(test) // ReferenceError: miaov is not defined.
console.log(foo) // undefined

for中使用,i只能在循環(huán)體內(nèi)使用,循環(huán)體外會(huì)報(bào)錯(cuò):

for (let i = 0; i < 10; i++) {
  // ...
}
console.log(i); // ReferenceError: i is not defined

const聲明變量同let聲明變量一樣,在塊級(jí)作用域有效。不同的是,const用來(lái)聲明常量,一旦聲明賦值后,變量不能被重新賦值:

const test = 123;
test = 10;
console.log(test);  // Uncaught TypeError: Assignment to constant variable.

如果賦的值是引用類型,那么可以通過(guò)變量來(lái)修改引用類型的值:

const test = {};
test.a = 1;
test.b = 2;
console.log(test);  // {a: 1, b: 2}

總結(jié)letconst

聲明的變量不具備變量提升(hoisting)特性

只在聲明所在的塊級(jí)作用域內(nèi)有效

不允許重復(fù)聲明

暫時(shí)性死區(qū)(TDZ)所聲明的變量綁定在定義的區(qū)域,使用let命令聲明變量之前,該變量都是不可用的

const 在聲明時(shí)必須被賦值值

解構(gòu)賦值

ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。通過(guò)這種方式可以避免在對(duì)象賦值時(shí)產(chǎn)生中間變量。

數(shù)組的結(jié)構(gòu)賦值
function test(){
    return [1,2,3,4];
}

var [a,b] = test();
console.log(a,b); // 1,2

test函數(shù)執(zhí)行后,返回的是一個(gè)數(shù)組。取數(shù)組前兩個(gè)值分別存在變量中,根據(jù)解構(gòu)賦值的規(guī)則,在左側(cè)聲明變量,放在中括號(hào)中,會(huì)把右邊數(shù)組中的值一一對(duì)應(yīng)賦值給左邊的變量。

對(duì)象的解構(gòu)賦值
function test(){
    return {a:1,b:2,c:3};
}

var {a,b} = test();
console.log(a,b); // 1,2

test函數(shù)執(zhí)行后,返回的是一個(gè)對(duì)象。分別取出對(duì)象中屬性為ab的值,根據(jù)解構(gòu)賦值的規(guī)則,在左側(cè)聲明變量,放在大括號(hào)中,變量名要和屬性名保持一致。

函數(shù)參數(shù)的解構(gòu)賦值
function test({a,b}){
    console.log(a,b);
}

test({a:1,b:2,c:3})

在形參中定義變量,得到實(shí)參對(duì)象指定的屬性。

默認(rèn)值

可以給變量設(shè)置默認(rèn)值和另聲明一個(gè)變量

var {a:otherVar,b,d="默認(rèn)值"} = {a:1,b:2,c:3};
console.log(d); // 默認(rèn)值
console.log(otherVar); // 1
console.log(a); // Uncaught ReferenceError: a is not defined

使用=給變量賦一個(gè)默認(rèn)值,如果右邊對(duì)象中沒(méi)有與之對(duì)應(yīng)的屬性,則按默認(rèn)值來(lái)。
使用:重新聲明一個(gè)變量,會(huì)把匹配到的a的值賦給新的變量otherVar,此時(shí)在外面使用時(shí)候,不能使用a

也可以連著一起使用:

var {a,b,d:foo="默認(rèn)值"} = {a:1,b:2,c:3};
console.log(foo); // "默認(rèn)值"
模板字符串

模板字符串(template string)是增強(qiáng)版的字符串,用反引號(hào)(`)標(biāo)識(shí)。
定義字符串

var str = `
  • hello
  • `

    在模板字符串中拼寫(xiě)HTML結(jié)構(gòu),無(wú)需考慮回車(chē)換行。

    在模板字符串中要渲染某個(gè)變量的值,可以寫(xiě)在占位符${}

    var message = "hello";
    var str = `
  • ${message}
  • `

    打印出:

    "
  • hello
  • "

    ${}中可以寫(xiě)入任意的表達(dá)式(表達(dá)式是可以被求值的代碼),例如:

    var message = "hello";
    var str = `
  • ${message} ${1+1} ${1 > 2 ? true : false} ${ [1,2,3].map(function(item){ return item*2 }) }
  • `

    但不能在${}中寫(xiě)入iffor這樣的語(yǔ)句。

    箭頭函數(shù)(Arrow Functions)

    在ES6中,箭頭函數(shù)就是函數(shù)的一種簡(jiǎn)寫(xiě)形式,允許使用“箭頭”(=>)定義函數(shù)。

    之前聲明函數(shù):

    function foo(){
        return 1;
    }

    改造為箭頭函數(shù):

    let foo = () => 1;

    上面使用“箭頭”(=>)定義的函數(shù),左側(cè)的()包裹函數(shù)的形參,如果定義的函數(shù)沒(méi)有形參或者多個(gè)形參,一定要使用括號(hào):

    // 沒(méi)有參數(shù),要使用()
    let test = () => 1;
    
    // 多個(gè)參數(shù),要使用()
    let foo = (a,b) => a + b;
    let bar = (a,b,c) => a + b + c;

    如果形參只有一個(gè),可以省略括號(hào):

    let foo = a => a;

    “箭頭”(=>)的右側(cè)是函數(shù)體代碼,會(huì)在函數(shù)執(zhí)行后作為函數(shù)的返回值,不需要顯示的使用return

    let foo = (a,b) => a + b;
    console.log(foo(1,2)); // 3

    以上的簡(jiǎn)寫(xiě)方式,使代碼變得非常簡(jiǎn)潔,忍不住再來(lái)個(gè)例子:

    let arr = [1,2,3];  
    let newArr = arr.map(item => item * 2);
    console.log(newArr); // [2,4,6]

    有多行代碼,可以寫(xiě)在一對(duì){}中,手動(dòng)調(diào)用return返回值:

    let foo = (a,b) => {
        console.log(a)
        console.log(b)
        return a + b; 
    }

    當(dāng)要返回的是對(duì)象時(shí),又不想手動(dòng)調(diào)用return,記得加上()保證是一個(gè)對(duì)象整體,而不被誤以為是函數(shù)體:

    var obj = () => ({a:1,b:2})
    console.log(obj());  // {a:1,b:2}
    箭頭函數(shù)中this指向

    箭頭函數(shù)內(nèi)的this,綁定定義時(shí)所在的作用域的this,并不是在調(diào)用時(shí)候決定this的指向。

    document.onclick = function (){
        setTimeout(function (){
            console.log(this); // 定時(shí)器執(zhí)行的函數(shù),在非嚴(yán)格模式下this指向window    
        },1000)    
    }

    如果要在setTimeout中使用點(diǎn)擊時(shí)的元素,通常需要存一個(gè)變量。

    document.onclick = function (){
        var that = this;
        setTimeout(function (){
            console.log(that); // that變量存的就是觸發(fā)事件的元素
        },1000)    
    }

    如果使用箭頭函數(shù),一切講變得非常簡(jiǎn)單:

    document.onclick = function (){
        setTimeout( () => {
            console.log(this); 
        },1000)    
    }    

    箭頭函數(shù)是在事件處理函數(shù)中定義,事件處理函數(shù)this指向的是觸發(fā)事件的元素,所以這個(gè)this,也就是觸發(fā)事件的元素。

    使用箭頭函數(shù)的特性:

    函數(shù)體內(nèi)的this值,綁定定義時(shí)所在的作用域的this

    不可以當(dāng)作構(gòu)造函數(shù)

    不可以使用arguments對(duì)象

    函數(shù)參數(shù)默認(rèn)值

    允許在形參聲明時(shí),寫(xiě)入默認(rèn)值,說(shuō)明這個(gè)值是可選的。

    傳統(tǒng)做法:

    /*
        參數(shù):
            a是必填項(xiàng)
            b可選的
    */
    function fn(a,b){
        b = b || 10;
        return a + b;
    }

    以上的方式是參數(shù)b如果沒(méi)傳入的話,值就為10;
    這樣寫(xiě)會(huì)有一個(gè)問(wèn)題,假如傳到函數(shù)的參數(shù)為0,則b的值依然為10,正確的應(yīng)該是0才對(duì),因?yàn)?strong>||運(yùn)算符左邊不成立,就返回右邊的值,左邊為0則不成立,就返回10了。

    ES6中,允許給函數(shù)參數(shù)默認(rèn)值:

    function fn(a,b=10){
        return a + b;
    }

    在形參中直接寫(xiě)上b=10即可。

    擴(kuò)展運(yùn)算符(spread)和Rest操作符

    擴(kuò)展運(yùn)算符和Rest操作符都指的是...,根據(jù)上下文的語(yǔ)境不同,解析方式也不同。

    數(shù)組擴(kuò)展運(yùn)算符

    將一個(gè)數(shù)組轉(zhuǎn)為用逗號(hào)分隔的參數(shù)序列。

    var arr = [1,2,3,4];
    console.log([...arr]);  // [1,2,3,4]

    把數(shù)組的每一項(xiàng)擴(kuò)展到另一個(gè)數(shù)組中。

    也可以從數(shù)組中找到最大值:

    var arr = [1,2,3,4];
    console.log(Math.max(...arr)); // 會(huì)依次把數(shù)組的每一項(xiàng)傳入到函數(shù)中
    對(duì)象擴(kuò)展運(yùn)算符

    擴(kuò)展運(yùn)算符(...)用于取出參數(shù)對(duì)象的所有可遍歷屬性,拷貝到當(dāng)前對(duì)象中,相當(dāng)于淺復(fù)制。

    var arr = {a:1,b:2,c:3};
    console.log({...arr});

    利用對(duì)象的屬性是唯一的特性,后面定義的覆蓋前面的屬性,可以修改一個(gè)屬性的值:

    var arr = {a:1,b:2,c:3};
    console.log({...arr,a:"修改了"});
    Rest操作符

    在使用解構(gòu)賦值時(shí),會(huì)把剩余的值,放在一個(gè)數(shù)組中:

    var arr = [1,2,3,4];
    var [a,...b] = arr;
    console.log(a);  // 1 
    console.log(b); // [2,3,4]

    如果是對(duì)象,會(huì)把剩余的屬性放在新對(duì)象中:

    var o = {a:1,b:2,c:3};
    var {a,...d} = o;
    console.log(a);  // 1
    console.log(d); // {b:2,c:3}

    在函數(shù)的形參中使用,會(huì)把剩余的形參都放在數(shù)組中:

    function fn(a,...b){
        console.log(a);  // 1
        console.log(b); // [2,3,4]
    }
    
    fn(1,2,3,4)

    Rest操作符可取到arguments,把實(shí)參傳入到一個(gè)數(shù)組中,而不是arguments類數(shù)組中:

    function fn(...b){
        console.log(b); // [1,2,3,4]
    }
    
    fn(1,2,3,4)

    注意,Rest操作符只能寫(xiě)在參數(shù)的最后,不能寫(xiě)在開(kāi)頭或中間,否則會(huì)報(bào)語(yǔ)法錯(cuò)誤:

    function fn(a,...b,c){
        console.log(a); // 
        console.log(b);
        console.log(c)
    }
    
    fn(1,2,3,4); // Uncaught SyntaxError: Rest parameter must be last formal parameter
    對(duì)象的簡(jiǎn)潔表示法

    變量名和屬性名相同,可直接寫(xiě)入變量名:

    var a = 10;
    var b = 20;
    var o = {
        a,
        b
    }
    
    console.log(o); // {a:10,b:20}

    定義函數(shù)可省略function關(guān)鍵字

    var o = {
        fn(){}
    }

    相當(dāng)于:

    var o = {
        fn: function () {}
    }

    以上屬于個(gè)人理解,如有偏差歡迎指正學(xué)習(xí),謝謝。

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93292.html

    相關(guān)文章

    • ECMAScript6 后建議的優(yōu)化語(yǔ)法

      摘要:是制定的的規(guī)范,代表發(fā)表的新版本,等以此類推。持續(xù)優(yōu)化更新變量聲明用于聲明常量,變量建議使用命令,建議不再使用命令,聲明的是全局變量,而則為局部變量。聲明的是全局變量也是頂層對(duì)象的屬性,則沒(méi)有綁定到頂層對(duì)象。 ECMAScript6 是 ECMA 制定的 JavaScript 的規(guī)范,ES6代表2016發(fā)表的新版本,ES7、ES5等以此類推。 (持續(xù)優(yōu)化更新) 變量聲明 cons...

      liaosilzu2007 評(píng)論0 收藏0
    • ES6-7

      摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...

      mudiyouyou 評(píng)論0 收藏0
    • ECMAScript6入門(mén)--Class對(duì)象

      摘要:中沒(méi)有類的概念,因此它的對(duì)象和基于類的語(yǔ)言中的對(duì)象有所不同。生成對(duì)象的傳統(tǒng)方法是通過(guò)構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的上述這種方式因?yàn)楹椭新暶鞣椒ǖ男问揭粯樱詫?duì)象和方法的區(qū)分并不明顯,很容易造成混淆。要求,子類的構(gòu)造函數(shù)必須執(zhí)行一次函數(shù),否則就會(huì)報(bào)錯(cuò)。 面向?qū)ο蟮恼Z(yǔ)言有一個(gè)標(biāo)志,那就是他們都有類的概念,通過(guò)類可以創(chuàng)建任意多個(gè)具有相同屬性和方法的對(duì)象。 ECMAScript5中沒(méi)有類的概念,因此它的對(duì)...

      wayneli 評(píng)論0 收藏0
    • 前端知識(shí)歸納

      摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語(yǔ)義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫(xiě)出簡(jiǎn)潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語(yǔ)義化),選擇合適的標(biāo)簽(代碼語(yǔ)義化)便于開(kāi)發(fā)者閱讀和寫(xiě)出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲(chóng)和...

      sixleaves 評(píng)論0 收藏0
    • 前端知識(shí)歸納

      摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語(yǔ)義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫(xiě)出簡(jiǎn)潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語(yǔ)義化),選擇合適的標(biāo)簽(代碼語(yǔ)義化)便于開(kāi)發(fā)者閱讀和寫(xiě)出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲(chóng)和...

      NotFound 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    raledong

    |高級(jí)講師

    TA的文章

    閱讀更多
    最新活動(dòng)
    閱讀需要支付1元查看
    <