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

ES6 學(xué)習(xí)筆記,如有錯誤回梧,歡迎指正臼勉。

筆記只記錄了一些個人認(rèn)為需要記住的知識點(diǎn)扑毡,其他的可以參考文末的網(wǎng)站柳沙。


let 和 const 命令

? ? ES6 新增了letconst 來聲明變量。

? ? var聲明: var 聲明 是聲明?全局變量?的妓柜。

? ? let聲明: let 聲明是 局部變量聲明别凤,所聲明的變量只在 let 命令所在的代碼塊內(nèi)有效

? ? const聲明:const是?聲明常量?的领虹,const一旦聲明就?必須初始化值规哪,不能留到以后賦值,只聲明不賦值就會報錯塌衰。const的作用域和 let聲明相同诉稍,只在聲明所在的?塊級作用域?中有效。另外需要注意的是最疆,用 const 聲明的常量 不能?再進(jìn)行更改 杯巨。

es6 中的塊級作用域
const聲明后不能更改

?注意:① const 和 let聲明的變量,不可重復(fù)聲明努酸。

let 和 const聲明變量不能重復(fù)聲明?

? ? ? ? ? ? ②const 和 let 聲明的變量不存在?變量提升

變量不提升

? ? ? ? ? ? ? ③?ES5中沒有塊級作用域服爷,ES6 中?引入了塊級作用域

運(yùn)用

上述情況在ES5 中的正確表現(xiàn)形式:運(yùn)用了 閉包 和 立即執(zhí)行函數(shù),非常復(fù)雜

ES5

解析:用 var 聲明時仍源,全局范圍內(nèi)有效心褐,所以全局變量只有一個 i ,每次循環(huán) i? 都會發(fā)生變化笼踩, 而函數(shù)內(nèi)的 console.log(i) 逗爹, 里面的 i 指向 的就是全局的 i,而 函數(shù)又不是 立即執(zhí)行嚎于,等到所有代碼運(yùn)行結(jié)束掘而,才執(zhí)行setTimeout , 此時 i 已經(jīng)為10 于购, 所以輸出 10個 10 袍睡;

用 let 聲明是,當(dāng)前的 i 只在本輪循環(huán)有效 肋僧, 每次循環(huán)的 i 其實(shí)都是一個 新? 的變量斑胜。


變量的解構(gòu)賦值(常用)

? ? ? ? ? ? ?ES6 允許按照一定模式,從?數(shù)組?和?對象?中提取值色瘩,對變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)逸寓。

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

解構(gòu)賦值

? ??????????????????????如果解構(gòu)不成功居兆,變量的值就等于undefined!V裆臁D嗥堋!勋篓!

解構(gòu)不成功

? ??????????注意:解構(gòu)賦值允許?使用默認(rèn)值吧享,ES6內(nèi)部使用?嚴(yán)格相等運(yùn)算符(===),只有當(dāng)數(shù)組成員嚴(yán)格等于 undefined 的時候譬嚣,默認(rèn)值才會生效钢颂。(見下圖,當(dāng)數(shù)組成員等于 null 時候拜银,默認(rèn)值不會生效殊鞭,因?yàn)?null 不嚴(yán)格等于 undefined)

設(shè)置默認(rèn)值
設(shè)置默認(rèn)值

? ?????② 對象?的解構(gòu)賦值

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

????????????????對象的解構(gòu)賦值的內(nèi)部機(jī)制是先找到同名屬性,再賦給對應(yīng)的變量尼桶。真正被賦值的是后者操灿,而不是前者。foo 是匹配模式泵督,baz 才是變量 ,真正被賦值的是變量 baz趾盐,而不是模式 foo

被賦值的是后者,不是前者

????????????????????對象的解構(gòu)也可以指定默認(rèn)值救鲤。

對象的解構(gòu)也可以指定默認(rèn)值??

????③ 字符串 的解構(gòu)賦值

字符串解構(gòu)

? ? ?④ 函數(shù)參數(shù) 的解構(gòu)賦值(見下文函數(shù)的擴(kuò)展)

? ? ?⑤?用途:1. 交換變量的值

變量的交換

? ? ? ? ? ? ? ? ? 2.從函數(shù)返回多個值

? ??????????????函數(shù)只能返回一個值久窟,如果要返回多個值,只能將它們放在數(shù)組或?qū)ο罄锓祷匮鸭颉S辛私鈽?gòu)賦值瘸羡,取出這些值就非常方便

取值

? ? ? ? ? ? ? ? ? 3.?函數(shù)參數(shù)的定義

函數(shù)參數(shù)的定義

? ? ? ? ? ? ? ? ? 4.提取 JSON 數(shù)據(jù)(用途較廣)

提取json數(shù)據(jù)

? ? ? ? ? ? ? ? ? 5.?函數(shù)參數(shù)的默認(rèn)值

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

? ? ? ? ? ? ? ? ? 6.?遍歷 Map 結(jié)構(gòu)(見后文的 ?Iterator 筆記)

? ? ? ? ? ? ? ? ??7.?輸入模塊的指定方法

? ??????????????const { SourceMapConsumer,SourceNode } = require("source-map");


字符串的擴(kuò)展

? ? 字符串模板(運(yùn)用廣泛):模板字符串(template string)是增強(qiáng)版的字符串搓茬,用反引號(`)標(biāo)識犹赖。模板字符串中嵌入變量,需要將變量名寫在 ${ } 之中卷仑。

字符串模板

????????????使用模板字符串表示多行字符串峻村,所有的?空格?和?縮進(jìn)?都會被保留在輸出之中。


函數(shù)的擴(kuò)展

? ??ES6 允許為函數(shù)的參數(shù)設(shè)置 默認(rèn)值锡凝,即直接寫在參數(shù)定義的后面粘昨。

設(shè)置默認(rèn)參數(shù)
不能再次聲明

? ??? ? 注意:參數(shù)變量是默認(rèn)聲明的,所以不能用let或const再次聲明窜锯。

參數(shù)重名的情況

? ??????????????使用參數(shù)默認(rèn)值時张肾,函數(shù)不能有同名參數(shù)。

? ??????與解構(gòu)賦值默認(rèn)值結(jié)合使用

解構(gòu)賦值

? ??????上面代碼只使用了?對象的解構(gòu)賦值默認(rèn)值锚扎,沒有使用函數(shù)參數(shù)的默認(rèn)值吞瞪。只有當(dāng)函數(shù)foo的參數(shù)是一個對象時,變量 x 和 y 才會通過解構(gòu)賦值生成驾孔。如果函數(shù)foo調(diào)用時沒提供參數(shù)芍秆,變量x和y就不會生成,從而報錯翠勉。通過提供函數(shù)參數(shù)的默認(rèn)值妖啥,就可以避免這種情況。

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

? ??????????????上面代碼指定对碌,如果沒有提供參數(shù)荆虱,函數(shù)foo的參數(shù)?默認(rèn)為一個空對象

? ? ? ? ? ? 練習(xí)題

? ??????????????兩種寫法都對函數(shù)的參數(shù) 設(shè)定了默認(rèn)值朽们,區(qū)別是寫法一函數(shù)參數(shù)的默認(rèn)值是空對象克伊,但是設(shè)置了對象解構(gòu)賦值的默認(rèn)值;寫法二函數(shù)參數(shù)的默認(rèn)值是一個有具體屬性的對象华坦,但是沒有設(shè)置對象解構(gòu)賦值的默認(rèn)值愿吹。

? ? ? ? ? ? ? ? 簡單來講,就是 傳了參數(shù)惜姐,函數(shù)參數(shù)的默認(rèn)值就不會起作用 犁跪; 沒傳參數(shù)椿息,函數(shù)參數(shù)的默認(rèn)值起作用。

? ? ? ? ? ? ? ? 傳了參數(shù)坷衍, 解構(gòu)賦值的默認(rèn)值 和 傳入的參數(shù) 進(jìn)行解構(gòu)寝优,寫法二 沒有 解構(gòu)默認(rèn)值,所以 如果 傳進(jìn)去的值枫耳,有缺少 X 或者? y乏矾,缺少的一個 都是 undefined。

習(xí)題

? ? ? ? rest 參數(shù)

? ??????ES6 引入 rest 參數(shù)(形式為...變量名)迁杨,用于獲取函數(shù)的多余參數(shù)钻心,這樣就不需要使用arguments對象了。rest 參數(shù)搭配的變量是一個數(shù)組铅协,該變量將多余的參數(shù)放入數(shù)組中捷沸。

? ?? ? ??? ??簡單來說,rest 參數(shù) 是一個 數(shù)組:贰Q鞲!?ト2园亍! 將 參數(shù) 都放入 一個數(shù)組中去姜贡。

rest 參數(shù)
rest 參數(shù)

? ??????????????rest 參數(shù)之后不能再有其他參數(shù)(即只能是最后一個參數(shù))试吁,否則會報錯。

? ??????箭頭函數(shù): ES6 允許使用“箭頭”(=>)定義函數(shù)鲁豪。

箭頭函數(shù)

? ?如果箭頭函數(shù)不需要參數(shù)需要多個參數(shù)潘悼,就使用一個圓括號代表參數(shù)部分律秃。

無參或多參的表現(xiàn)形式

? ? ? ? ? ? ? ?箭頭函數(shù)可以與變量解構(gòu)結(jié)合使用爬橡。

箭頭函數(shù)可以與變量解構(gòu)結(jié)合使用

? ? ? ? ? ? ? ? 注意? !!!!!!!!!!

? ??????????????(1)函數(shù)體內(nèi)的this對象,就是定義時所在的對象棒动,而不是使用時所在的對象糙申。

????????????????(2)不可以當(dāng)作構(gòu)造函數(shù),也就是說船惨,不可以使用new命令柜裸,否則會拋出一個錯誤。

????????????????(3)不可以使用arguments對象粱锐,該對象在函數(shù)體內(nèi)不存在疙挺。如果要用,可以用 rest 參數(shù)代替怜浅。

????????????????(4)不可以使用yield命令铐然,因此箭頭函數(shù)不能用作 Generator 函數(shù)蔬崩。

????????????????上面四點(diǎn)中,第一點(diǎn)尤其值得注意搀暑。this對象的指向是可變的沥阳,但是在箭頭函數(shù)中,它是固定的自点。

this 指向

? ??????????????????上面代碼中桐罕,轉(zhuǎn)換后的 ES5 版本清楚地說明了,箭頭函數(shù)里面根本沒有自己的this桂敛,而是引用外層的this功炮。


數(shù)組的擴(kuò)展

? ? ① 擴(kuò)展運(yùn)算符

擴(kuò)展運(yùn)算符(spread)是三個點(diǎn)(...)。它好比 rest 參數(shù)的逆運(yùn)算埠啃,將一個數(shù)組?轉(zhuǎn)為?用逗號分隔的參數(shù)序列死宣。

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

? ? ????該運(yùn)算符主要用于函數(shù)的調(diào)用,將一個數(shù)組變成參數(shù)序列碴开。

擴(kuò)展預(yù)算符的運(yùn)用

????擴(kuò)展運(yùn)算符的運(yùn)用:1. 復(fù)制數(shù)組

復(fù)制數(shù)組

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.合并數(shù)組

合并數(shù)組

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.與解構(gòu)賦值結(jié)合

? ? ? ? ? ?如果將擴(kuò)展運(yùn)算符用于數(shù)組賦值毅该,只能放在參數(shù)的最后一位,否則會報錯潦牛。

與解構(gòu)賦值結(jié)合

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.字符串

字符串與擴(kuò)展運(yùn)算符

? ? ② Array.from( ) : Array.from方法用于將?兩類對象?轉(zhuǎn)為?真正的數(shù)組類似數(shù)組的對象(array-like object)和可遍歷(iterable)的對象(包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map).

Array.from()

? ??????這就是一個標(biāo)準(zhǔn)的JSON數(shù)組格式眶掌,跟普通的JSON對比是在最后多了一個length屬性。只要是這種?特殊的json格式?都可以輕松使用ES6的語法轉(zhuǎn)變成數(shù)組巴碗。(必須要有l(wèi)ength 屬性F优馈!O鹣U儇!

③?Array.of( ) :將一組值轉(zhuǎn)換為數(shù)組逸爵。

? ??????Array.of總是返回參數(shù)值組成的數(shù)組具滴。如果沒有參數(shù),就返回一個空數(shù)組师倔。

???Array.of

?④ find( )實(shí)例方法

? ??????????數(shù)組實(shí)例的find方法构韵,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調(diào)函數(shù)趋艘,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)疲恢,直到找出第一個返回值為true的成員,然后返回該成員瓷胧。如果沒有符合條件的成員显拳,則返回undefined。

? ??????????find方法的回調(diào)函數(shù)可以接受三個參數(shù)搓萧,依次為當(dāng)前的值杂数、當(dāng)前的位置原數(shù)組遇八。

find( )實(shí)例方法

⑤??includes( )?實(shí)例方法

? ??????表示某個數(shù)組是否包含給定的值,返回 布爾值

?includes()

fill( )?實(shí)例方法

? ???????數(shù)組進(jìn)行填充耍休,它接收三個參數(shù)刃永,第一個參數(shù)是填充的變量,第二個是開始填充的位置羊精,第三個是填充到的位置斯够。數(shù)組中已有的元素,會被全部抹去喧锦。

?fill( )

對象的擴(kuò)展

? ? 屬性的簡潔表示法:ES6 中允許在對象中读规,直接寫變量。這時燃少,屬性名為變量名束亏,屬性值為變量的值。

對象中直接寫變量
對象中直接寫變量

? ???方法的簡潔表示法

方法的簡潔表達(dá)

? ? 綜合運(yùn)用

綜合運(yùn)用

????????屬性名表達(dá)式

? ??????ES6 允許字面量定義對象時阵具,用 表達(dá)式 作為對象的屬性名碍遍,即把表達(dá)式放在方括號內(nèi)。

屬性名表達(dá)式

? ??????Object.is( ?) 對象比較

? ??????????它用來比較兩個值是否嚴(yán)格相等阳液,與嚴(yán)格比較運(yùn)算符(===)的行為基本一致怕敬。

?? Object.is

? ??????Object.assign( ?)合并對象

? ??????????Object.assign方法用于對象的合并,將源對象(source)的所有可枚舉屬性帘皿,復(fù)制到目標(biāo)對象(target)东跪。Object.assign方法的第一個參數(shù)是目標(biāo)對象,后面的參數(shù)都是源對象鹰溜。

?Object.assign( ?)

? ??????注意虽填,如果目標(biāo)對象與源對象有同名屬性,或多個源對象有同名屬性曹动,則后面的屬性會覆蓋前面的屬性斋日。

? ??Object.keys( 對象 )

? ? ? ? Object.keys方法返回一個數(shù)組,成員是參數(shù)對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的?鍵名仁期。

????Object.values(?對象?)

????Object.values方法返回一個數(shù)組桑驱,成員是參數(shù)對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的 鍵值竭恬。


參考:ECMAScript 6 入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跛蛋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痊硕,更是在濱河造成了極大的恐慌赊级,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岔绸,死亡現(xiàn)場離奇詭異理逊,居然都是意外死亡橡伞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門晋被,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兑徘,“玉大人,你說我怎么就攤上這事羡洛」夷裕” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵欲侮,是天一觀的道長崭闲。 經(jīng)常有香客問我,道長威蕉,這世上最難降的妖魔是什么刁俭? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮韧涨,結(jié)果婚禮上牍戚,老公的妹妹穿的比我還像新娘。我一直安慰自己虑粥,他們只是感情好翘魄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舀奶,像睡著了一般暑竟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上育勺,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天但荤,我揣著相機(jī)與錄音,去河邊找鬼涧至。 笑死腹躁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的南蓬。 我是一名探鬼主播纺非,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赘方!你這毒婦竟也來了烧颖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤窄陡,失蹤者是張志新(化名)和其女友劉穎炕淮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跳夭,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涂圆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年们镜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片润歉。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡模狭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踩衩,到底是詐尸還是另有隱情胞皱,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布九妈,位于F島的核電站反砌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏萌朱。R本人自食惡果不足惜宴树,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晶疼。 院中可真熱鬧酒贬,春花似錦、人聲如沸翠霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寒匙。三九已至零如,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锄弱,已是汗流浹背考蕾。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留会宪,地道東北人肖卧。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像掸鹅,于是被迫代替她去往敵國和親塞帐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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

  • 最近學(xué)習(xí)了ES6巍沙,被它更簡潔的代碼編寫方式葵姥、面向?qū)ο笠约澳K化開發(fā)所吸引。ES6有一定的學(xué)習(xí)成本而且知識點(diǎn)比較瑣碎...
    Mescal川閱讀 3,558評論 0 3
  • 第一章 塊級作用域綁定 let 和 const 都是不存在提升颊咬,聲明的都是塊級標(biāo)識符都禁止重聲明 每個const聲...
    NowhereToRun閱讀 1,584評論 0 2
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持务甥,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券牡辽,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,032評論 3 37
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,781評論 0 1
  • 看了電影版《從你的全世界路過》敞临,望著其中稻城亞丁熟悉又略有些陌生的景象态辛,不禁翻看起去年在稻城留下的照片,忽然想念稻...
    杜小姐的秘密花園閱讀 1,264評論 18 25