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

資訊專欄INFORMATION COLUMN

ES6語法詳解(一)

wendux / 3020人閱讀

摘要:凍結(jié)對象可以使用方法。對象的解構(gòu)賦值必須要屬性名相同,順序毫無影響。數(shù)組解構(gòu)賦值默認值,當?shù)忍栍疫叺闹禃r,默認值生效。

let變量

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

暫存死區(qū)

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

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

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

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

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

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

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

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

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

const json = Object.freeze({});
//常規(guī)模式下修改json無效,嚴格模式下報錯
頂層變量

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

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

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

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

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

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

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

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

let {a} = {a: 1}     //簡寫 
let {a: a} = {a: 1}  //全寫

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

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

數(shù)組解構(gòu)賦值默認值,當?shù)忍栍疫叺闹?=== undefined時,默認值生效。

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]
}

對象解構(gòu)賦值默認值,當對象屬性值嚴格等于undefined時。

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

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

事實上,只要某種數(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ù)也可使用默認值

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

等號右邊如果不是對象,會先轉(zhuǎn)成對象,轉(zhuǎn)換失敗則報錯。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Es6 寫的文件import 起來解決方案詳解

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

    tinylcy 評論0 收藏0
  • Es6 寫的文件import 起來解決方案詳解

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

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

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

    Lowky 評論0 收藏0
  • ES6-7

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

    mudiyouyou 評論0 收藏0
  • ES6的Iterator對象詳解

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

    KoreyLee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<