ES6 學(xué)習(xí)筆記

一恩沛、let和const

1. let,const不存在變量提升,只在聲明所在的塊級作用域中有效。

2. Es5只有全局作用域和函數(shù)作用域,Es6添加了塊級作用域秧饮。

3. 考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級作用域內(nèi)聲明函數(shù)。如果確實需要柴灯,也應(yīng)該寫成函數(shù)表達(dá)式卖漫,而不是函數(shù)聲明語句。

4. 對于復(fù)合類型的變量赠群,變量指向數(shù)據(jù)所在的地址羊始,不保證該地址的數(shù)據(jù)不變,所以在將對象聲明為常量時必須特別小心查描。

5.let, const, class定義的全局變量與頂層對象脫鉤

二突委、變量的解析賦值

1. 對象的解析賦值的內(nèi)部機(jī)制,是先找到同名屬性冬三,然后再賦給對應(yīng)的變量匀油。真正被賦值的是后者,而不是前者勾笆。如:

2. 解析也可用于嵌套結(jié)構(gòu)的對象敌蚜,如

3. 對象的解析賦值,可以很方便的將現(xiàn)有對象的方法窝爪,賦值到某個變量弛车,如

4. 圓括號問題,解析賦值解析圓括號時很麻煩蒲每,只要由可能纷跛,就不要在模式中放置圓括號。另外:

* 變量聲明語句中邀杏,不能帶有圓括號

* 函數(shù)參數(shù)中忽舟,模式不能帶有圓括號

* 賦值語句中,不能將整個模式淮阐,或嵌套模式中的一層叮阅,放在圓括號中

三、字符串的擴(kuò)展

1. JS內(nèi)部泣特,字符以UTF-16的格式存儲浩姥,每個字符固定為2個字節(jié)。對于那些需要4個字節(jié)存儲的字符(Unicode碼大于0xFFFF的字符)状您,JS會認(rèn)為它們是兩個字符勒叠。

2. Es6提供的codePointAt方法,直接使用時參數(shù)也不能正確識別膏孟,如下面的字符串中眯分,a的位置應(yīng)該是1,但必須傳入2才能取到字符柒桑,解決的辦法是使用for...of循環(huán)弊决,它能正確識別32位的UTF-16字符。

3. Es6中提供了另外操作32位的UTF-16的函數(shù):String.fromCodePoint(), at(), includes(), startsWith(), endsWith()如

4.模板字符串

四、數(shù)值

1. 二進(jìn)制和八進(jìn)制的表示法分別使用前綴0b/0B和0o/0O飘诗。

2. 新的函數(shù)Number.isFinite(), Number.isNaN(), Number.parstInt(), Number.parseFloat(), Number.isInteger(),

在JS內(nèi)部与倡,整數(shù)和浮點數(shù)是同樣的存儲方法,所以3和3.0被視為同一個值昆稿。

3. 安全整數(shù)檢測Number.isSafeInteger(), Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER纺座。

在使用Number.isSafeInteger()時,不能只驗證運算結(jié)果溉潭,而要同時驗證參與運算的每個值净响。

4. ES6在Math對象上新增了17個與數(shù)學(xué)相關(guān)的方法。

五喳瓣、數(shù)組

1. Array.from()用于將類似數(shù)組的對象(含有l(wèi)ength屬性)和可遍歷的對象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)轉(zhuǎn)換為數(shù)組

2. Array.of()用來將一組值轉(zhuǎn)換為數(shù)組馋贤,主要目的是彌補(bǔ)Array()和new Array()由于參數(shù)的不同導(dǎo)致的行為的差異,如

3. 數(shù)組實例的copyWithin()夫椭,在當(dāng)前數(shù)組內(nèi)部掸掸,將指定位置的成員復(fù)制到其他位置(會覆蓋原有成員)。

4. 數(shù)組實例的find()和findIndex()函數(shù)

5. 數(shù)組實例的includes()函數(shù)

同Set結(jié)構(gòu)的has()方法一樣蹭秋,數(shù)組的includes()函數(shù)是用來查找值的扰付;而Map結(jié)構(gòu)的has()方法是用來查找鍵名的。

6.由于空位的處理規(guī)則非常不統(tǒng)一仁讨,所以要避免出現(xiàn)空位的情況羽莺。

六、函數(shù)

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

2. 函數(shù)的length屬性洞豁,表示該函數(shù)預(yù)期傳入的參數(shù)個數(shù)盐固。如果參數(shù)有默認(rèn)值,則length不包含這個參數(shù)丈挟。同理刁卜,rest參數(shù)也不會計入length屬性

3. 如果將參數(shù)默認(rèn)值設(shè)為undefined,表明這個參數(shù)是可以省略的曙咽。

functionfoo(bar = undefined){......}

4. rest參數(shù)蛔趴,形式為“...變量名“,用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對象了例朱。

5. 擴(kuò)展運算符“...” 孝情,它的作用是將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。

擴(kuò)展運算符內(nèi)部調(diào)用的是數(shù)據(jù)結(jié)構(gòu)的Iterator借口洒嗤,因此只要具有Iterator接口的對象箫荡,都可以使用擴(kuò)展運算符,比如Map結(jié)構(gòu)渔隶。

6. 箭頭函數(shù)


如果沒有參數(shù)羔挡,或多個參數(shù),就使用一個圓括號代表參數(shù)部分

感覺添加一個小括號比較好,這樣可以統(tǒng)一起來

7.箭頭函數(shù)中的this婉弹,指向固定化睬魂,并不是因為箭頭函數(shù)內(nèi)部有綁定this的機(jī)制终吼,實際原因是箭頭函數(shù)根本沒有自己的this镀赌,導(dǎo)致內(nèi)部的this就是外層代碼塊的this。

上面的代碼中际跪,只有一個this商佛,就是函數(shù)foo的this,所以t1,t2,t3輸出同樣的結(jié)果姆打,因為內(nèi)部所以的箭頭函數(shù)都沒有自己的this良姆,他們的this實際都是最外層foo函數(shù)的this。

長期以來幔戏,Js的this對象一直都是一個令人頭疼的問題玛追,在對象方法中使用this,必須非常小心闲延,箭頭函數(shù)“綁定”this痊剖,很大程度上解決了這個困擾。

7.尾調(diào)用優(yōu)化和尾遞歸

七垒玲、對象,允許使用變量和函數(shù)陆馁,作為對象的屬性和方法

1.簡潔表示法

2.判斷兩個值是否相等使用Object.is()

3.Object.assign()方法用于對象的合并,將源對象source的所有可枚舉屬性合愈,復(fù)制到目標(biāo)對象target叮贩。

如果目標(biāo)對象與源對象有同名屬性,或多個源對象有同名屬性佛析,則后面的屬性會覆蓋前面的屬性

Object.assign方法是淺拷貝益老,如果源對象某個屬性的值是對象,則目標(biāo)對象拷貝得到的是這個對象的引用寸莫。

Object.assign()的用途

為對象添加屬性

為對象添加方法

克隆對象

合并多個對象

為屬性指定默認(rèn)值

4.遍歷對象 Object.keys, Object.values, Object.entries

5.擴(kuò)展運算符

八捺萌、Set和Map

1. Set類似于數(shù)組,但它的成員值都是唯一的储狭。

* keys():返回鍵名的遍歷器* values():返回鍵值的遍歷器* entries():返回鍵值對的遍歷器* forEach():使用回調(diào)函數(shù)遍歷每個成員> 擴(kuò)展運算符...內(nèi)部使用for...of循環(huán)互婿,所以也可以用于Set結(jié)構(gòu)

九、一些不常用的功能

1. SIMD(Single Instruction/Multiple Data)辽狈,即單指令慈参,多數(shù)據(jù)

它是JS操作CPU對應(yīng)指令的接口,可以使用一個指令刮萌,完成多個數(shù)據(jù)的運算驮配,所以被廣泛用于3D圖形運算、物理模擬等運算量超大的項目之中。

SIMD是數(shù)據(jù)并行處理(parallelism)的一種手段壮锻,可以加速一些運算密集型操作的速度琐旁。

十、編程風(fēng)格

1. let和const

let取代var

所有的函數(shù)都應(yīng)該設(shè)置為常量

長遠(yuǎn)來看猜绣,JS可能會有多線程的實現(xiàn)灰殴,let表示的變量,這時let表示的變量掰邢,只應(yīng)出現(xiàn)在單線程運行的代碼中牺陶,不能是多線程共享的,這樣有利于保證線程安全辣之。

2. 字符串

靜態(tài)字符串一律使用單引號或反引號掰伸,不使用雙引號

動態(tài)字符串使用反引號

3.解構(gòu)賦值

使用數(shù)組成員對變量賦值時,優(yōu)先使用解構(gòu)賦值

函數(shù)的參數(shù)如果是對象的成員怀估,優(yōu)先使用解構(gòu)賦值

如果函數(shù)返回多個值狮鸭,優(yōu)先使用對象的解構(gòu)賦值,而不是數(shù)組的解構(gòu)賦值

4. 對象

單行定義的對象多搀,最后一個成員不以逗號結(jié)尾歧蕉。多行定義的對象,最后一個成員以逗號結(jié)尾

對象盡量靜態(tài)化酗昼,一旦定義廊谓,就不得隨意添加新的屬性。如果添加屬性不可避免麻削,要使用Object.assign方法

如果對象的屬性名是動態(tài)的蒸痹,可以在創(chuàng)造對象的時候,使用屬性表達(dá)式定義呛哟。

5.數(shù)組

使用擴(kuò)展運算符(...)拷貝數(shù)組

使用Array.from方法叠荠,將類似數(shù)組的對象轉(zhuǎn)為數(shù)組

6.函數(shù)

立即執(zhí)行函數(shù)可以寫成箭頭函數(shù)的形式

簡單的、單行的扫责、不會復(fù)用的函數(shù)榛鼎,建議采用箭頭函數(shù)。如果函數(shù)體較為復(fù)雜鳖孤,行數(shù)較多者娱,還是應(yīng)該采用傳統(tǒng)的函數(shù)寫法

7. Map和Object

只有模擬現(xiàn)實世界的實體對象時,才使用Object苏揣。如果只是需要key : value的數(shù)據(jù)結(jié)構(gòu)黄鳍,使用Map結(jié)構(gòu)。因為Map有內(nèi)建的遍歷機(jī)制

8. 使用ESLint

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末平匈,一起剝皮案震驚了整個濱河市框沟,隨后出現(xiàn)的幾起案子藏古,更是在濱河造成了極大的恐慌,老刑警劉巖忍燥,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拧晕,死亡現(xiàn)場離奇詭異,居然都是意外死亡梅垄,警方通過查閱死者的電腦和手機(jī)厂捞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哎甲,“玉大人蔫敲,你說我怎么就攤上這事饲嗽√棵担” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵貌虾,是天一觀的道長吞加。 經(jīng)常有香客問我,道長尽狠,這世上最難降的妖魔是什么衔憨? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮袄膏,結(jié)果婚禮上践图,老公的妹妹穿的比我還像新娘。我一直安慰自己沉馆,他們只是感情好码党,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斥黑,像睡著了一般揖盘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锌奴,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天兽狭,我揣著相機(jī)與錄音,去河邊找鬼鹿蜀。 笑死箕慧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茴恰。 我是一名探鬼主播颠焦,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琐簇!你這毒婦竟也來了蒸健?” 一聲冷哼從身側(cè)響起座享,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似忧,沒想到半個月后渣叛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡盯捌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年淳衙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饺著。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡箫攀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幼衰,到底是詐尸還是另有隱情靴跛,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布渡嚣,位于F島的核電站梢睛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏识椰。R本人自食惡果不足惜绝葡,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腹鹉。 院中可真熱鬧藏畅,春花似錦、人聲如沸功咒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航瞭。三九已至诫硕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刊侯,已是汗流浹背章办。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留滨彻,地道東北人藕届。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像亭饵,于是被迫代替她去往敵國和親休偶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)辜羊,也就是一...
    悟名先生閱讀 4,150評論 0 13
  • 《ECMAScript6 入門》阮一峰 讀書筆記 let和constlet聲明的變量僅在塊級作用域內(nèi)有效踏兜,var聲...
    親愛的孟良閱讀 722評論 1 2
  • ECMAScript 6.0( 以下簡稱ES6) 是JavaScript語言的下一代標(biāo)準(zhǔn)词顾。 ECMAScript和...
    EarthChen閱讀 447評論 0 0
  • 過年回家肉盹,除了年關(guān)遵循回家這個傳統(tǒng)外,還有另一個原因就是因為妹妹疹尾,如果我不回去的話上忍,她就真的沒有家與年可言了。 父...
    曹痞閱讀 821評論 17 17
  • 我是誰 我在那 我要干什么 拿起筆纳本,開始在這里記錄自己窍蓝。我活的渾渾噩噩,很多次問自己繁成,我到底要干什...
    浪子俗人閱讀 105評論 0 0