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

資訊專(zhuān)欄INFORMATION COLUMN

ES6語(yǔ)法詳解(一)

wendux / 3012人閱讀

摘要:凍結(jié)對(duì)象可以使用方法。對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值時(shí),默認(rèn)值生效。

let變量

let聲明的變量在let命令所在的代碼塊中有效。不存在變量提升,只能先聲明后使用。

暫存死區(qū)

如果區(qū)塊中存在letconst命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量。

var a = 1;
{
    a = 2;           //ReferenceError
    let a = "a";
    console.log(a);  //"a";
}

在相同塊級(jí)作用域中,不能用let重復(fù)聲明同一變量。即使已存在的變量是通過(guò)var聲明的。

let a = 1;  let a = 2;   //報(bào)錯(cuò)
let a = 1;  var a = 2;   //報(bào)錯(cuò),var聲明有變量提升作用
塊級(jí)作用域和函數(shù)聲明

在塊級(jí)作用域中,用let聲明的變量只在當(dāng)前作用域中有效,且不會(huì)受到外部的影響,所以塊級(jí)作用域可以替代自執(zhí)行函數(shù)表達(dá)式。

理論上,函數(shù)在塊級(jí)作用域中聲明行為和let類(lèi)似,但在es6瀏覽器環(huán)境中,為了兼容老版本,函數(shù)聲明與var聲明變量類(lèi)似,會(huì)提升到全局作用域頭部,和當(dāng)前塊級(jí)作用域的頭部,為了避免差異,可以將函數(shù)聲明寫(xiě)成函數(shù)表達(dá)式。

let fn = function () {};    //函數(shù)表達(dá)式
const常量

聲明常量必須馬上賦值且不能再改變。constlet有類(lèi)似的特點(diǎn):在塊級(jí)作用域內(nèi)有效,聲明不提升,存在暫存死區(qū),不可重復(fù)聲明。

復(fù)合型數(shù)據(jù)如object,聲明后不可在重新賦值,但可以修改這個(gè)值本身,比如修改屬性和新增屬性。凍結(jié)對(duì)象可以使用Object.freeze方法。

const json = Object.freeze({});
//常規(guī)模式下修改json無(wú)效,嚴(yán)格模式下報(bào)錯(cuò)
頂層變量

javascript的頂層對(duì)象是windownode的頂層對(duì)象是globalES6規(guī)定用let const class聲明的變量不在是頂層對(duì)象的屬性。

let a = 1;
window.a   //undefined
解構(gòu)賦值

從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,稱(chēng)為解構(gòu)(destructuring)

數(shù)組的解構(gòu)賦值,按照對(duì)應(yīng)的順序賦值,如果值數(shù)量超出則多余的值被拋棄,如果值不夠則為undefined

let arr = [1, [2, 3]];
let [a, [b, c]] = arr;

對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。如果屬性名不同,需要寫(xiě)成如下形式。

let {a: b} = {c: 1};
b //1

實(shí)際上對(duì)象解構(gòu)賦值的是后者。

let {a} = {a: 1}     //簡(jiǎn)寫(xiě) 
let {a: a} = {a: 1}  //全寫(xiě)

字符串解構(gòu)賦值和數(shù)組類(lèi)似。

let [a, b, c] = "hello";
console.log(a,b,c)  //h,e,l

數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值 === undefined時(shí),默認(rèn)值生效。

let [a = 1, b = 2] = [undefined, null];
console.log(a, b);  //1 null

以上代碼邏輯是:

if ([undifined, null][0] === undefined) {
    a = 1;
} else {
    a = [undifined, null][0]
}

對(duì)象解構(gòu)賦值默認(rèn)值,當(dāng)對(duì)象屬性值嚴(yán)格等于undefined時(shí)。

let {a, b=2} = {1, undefined}
a,b //1,2

let {a: b=1} = {a: undefined}
b //1

事實(shí)上,只要某種數(shù)據(jù)結(jié)構(gòu)具有 Iterator 接口,都可以采用數(shù)組形式的解構(gòu)賦值。

函數(shù)參數(shù)的解構(gòu)賦值,傳入的參數(shù)不是數(shù)組或?qū)ο螅亲兞俊?/p>

let fn = ( [a, b] ) => {
    return a + b;
};
fn ([1, 2]); //3
[[1,2],[3,4]].map([a,b]=> a+b);
//[3,7]

函數(shù)參數(shù)也可使用默認(rèn)值

let fn({a=1, b=2} = {}) { return [a,b]}
fn({a:10})  // [10,2]

等號(hào)右邊如果不是對(duì)象,會(huì)先轉(zhuǎn)成對(duì)象,轉(zhuǎn)換失敗則報(bào)錯(cuò)。

let {toString: s} = 123;
s === Number.prototype.toString

let {toString: s} = true;
s === Blooean.prototype.toString

undefined null不能轉(zhuǎn)成對(duì)象,結(jié)構(gòu)賦值報(bào)錯(cuò)。

let {a} = undefined;   //TypeError
let {b} = null;        //TypeError

解構(gòu)賦值應(yīng)用:

//交換變量的值
let a = 1, b = 2;
[a,b] = [b, a];

//函數(shù)返回多個(gè)值
let fn = () => {x: 1, y: 2}

//提取json數(shù)據(jù)
let {a, b} = obj;
字符串?dāng)U展

ES6提供for...of方法遍歷字符串。

新增的其他方法:startsWidth() endsWidth() includes()

let s = "hello word!";
s.startsWith("hello");     //true
s.endsWidth("word");       //true
s.includes("o");           //true 

charAt() 用于返回給定位置的字符,對(duì)于編碼大于0xFFFF的字符用at()方法。

"ab".charAt(0)  //"a"
"           
               
                                           
                       
                 

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

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

相關(guān)文章

  • Es6 寫(xiě)的文件import 起來(lái)解決方案詳解

    摘要:解決方法經(jīng)過(guò)查閱資料,發(fā)現(xiàn)可以通過(guò)打包工具來(lái)將依賴(lài)合并成一個(gè)文件,然后引入中。感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持 這段時(shí)間,學(xué)習(xí)了一點(diǎn)關(guān)于es6新規(guī)范的知識(shí),然后心血來(lái)潮,想嘗試一下用ES6編寫(xiě)的代碼在瀏覽器中跑起來(lái)。 說(shuō)干就干,先說(shuō)下我的實(shí)現(xiàn)步驟(沒(méi)想到有坑!) 1.把ES6代碼轉(zhuǎn)譯成ES5;2.html文件引入轉(zhuǎn)譯后的ES5;3.然后在瀏覽器環(huán)境中運(yùn)行;4.在node...

    tinylcy 評(píng)論0 收藏0
  • Es6 寫(xiě)的文件import 起來(lái)解決方案詳解

    摘要:解決方法經(jīng)過(guò)查閱資料,發(fā)現(xiàn)可以通過(guò)打包工具來(lái)將依賴(lài)合并成一個(gè)文件,然后引入中。感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持 這段時(shí)間,學(xué)習(xí)了一點(diǎn)關(guān)于es6新規(guī)范的知識(shí),然后心血來(lái)潮,想嘗試一下用ES6編寫(xiě)的代碼在瀏覽器中跑起來(lái)。 說(shuō)干就干,先說(shuō)下我的實(shí)現(xiàn)步驟(沒(méi)想到有坑!) 1.把ES6代碼轉(zhuǎn)譯成ES5;2.html文件引入轉(zhuǎn)譯后的ES5;3.然后在瀏覽器環(huán)境中運(yùn)行;4.在node...

    Markxu 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階(十五):詳解 ES6 Modules

    摘要:下載地址安裝一個(gè)好用的命令行工具在環(huán)境下,系統(tǒng)默認(rèn)的非常難用,所以我個(gè)人比較推薦大家使用或者。下載地址安裝在命令行工具中使用查看版本的方式確保與都安裝好之后,我們就可以安裝了。前端基礎(chǔ)進(jìn)階系列目錄 showImg(https://segmentfault.com/img/remote/1460000009654403?w=1240&h=272); 對(duì)于新人朋友來(lái)說(shuō),想要自己去搞定一個(gè)E...

    Lowky 評(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
  • ES6的Iterator對(duì)象詳解

    摘要:實(shí)現(xiàn)原理創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。具體來(lái)說(shuō),就是返回一個(gè)包含和兩個(gè)屬性的對(duì)象。接口部署在對(duì)象的屬性上可以調(diào)用這個(gè)屬性,就得到遍歷器對(duì)象。 Iterator實(shí)現(xiàn)原理 創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。 第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一...

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

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

0條評(píng)論

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