ES6筆記

1表蝙、let和const命令

  • let聲明的變量只在let所在的代碼塊有效,即有塊級作用域汇跨,不同于var;

  • let定義的變量不存在變量提升問題,必須先聲明后使用;

  • 不能在同一作用域內(nèi)重復(fù)聲明變量游昼,這與ES5的var不同骄噪,故不能在函數(shù)作用域下直接重新聲明函數(shù)的參數(shù)澜公;

  • 塊級作用域可以任意嵌套蝶防,內(nèi)存可以訪問外層殷费,外層不可以訪問內(nèi)層仍律,內(nèi)層可以重新定義外層的同名變量;

  • ES5嚴(yán)格模式規(guī)定函數(shù)必須在頂層作用域和函數(shù)內(nèi)聲明,其他情況(比如if代碼塊炕横、循環(huán)代碼塊)的聲明都會報錯份殿,但在ES6中可以;

  • const命令和let命令不同之處在于const用于定義常量腔寡,并在聲明變量時必須同時賦值糯彬,如const PI=3.14撩扒,不能寫成const PI;PI=3.14炒辉;

  • let和const命令聲明的全局變量不屬于全局對象的屬性,var命令和function命令聲明的全局變量屏轰,依舊是全局對象的屬性。另外還有import和class命令叨粘,故在ES6中共有6種聲明變量的方法升敲。

  • for循環(huán)有一個特別之處,就是設(shè)置循環(huán)變量的那部分是一個父作用域,而循環(huán)體內(nèi)部是一個單獨的子作用域鹏氧。

//函數(shù)內(nèi)部的變量i與循環(huán)變量i不在同一個作用域茸俭,有各自單獨的作用域
for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc

2艇炎、變量的解構(gòu)賦值

+、數(shù)組的解構(gòu)賦值基本用法是[a,b,c]=[1,2,3],然后a=1,b=2,c=3;

+鼻由、解構(gòu)分完全解構(gòu)和不完全解構(gòu)婆硬,不完全解構(gòu)有兩種情況:左邊少于右邊和右邊少于

左邊,右邊少于左邊時,沒有對應(yīng)值的變量賦值為undefined。解構(gòu)要求等號右邊是可

遍歷的結(jié)構(gòu),如數(shù)組坤邪,非空對象等怕磨;

+员帮、解構(gòu)賦值可以指定默認(rèn)值渣锦,如[a=1,b=2]=[]裂七,默認(rèn)值生效的條件是右邊對應(yīng)位置上

的值是不是嚴(yán)格等于undefined,如[a=1,b=2]=[undefined,null],此時a=1,b=null;

+、以上是數(shù)組的解構(gòu)賦值氮趋,對象也有解構(gòu)賦值,基本用法為{foo,bar}={foo:’a’,bar:’b’}昵观;

+啊犬、數(shù)組的元素是按次序排列的觉至,變量的取值由它的位置決定语御;而對象的屬性沒有次序应闯,

變量必須與屬性同名碉纺,才能取到正確的值唬涧,如果變量名與屬性名不一致捧搞,必須寫成下面

這樣{foo:fo}={foo:’a’}胎撇,此時就有fo=’a’ 也就是說晚树,對象的解構(gòu)賦值的內(nèi)部機(jī)制爵憎,是先找

到同名屬性宝鼓,然后再賦給對應(yīng)的變量愚铡。真正被賦值的是后者沥寥,而不是前者邑雅;

f+蒂阱、要將一個已經(jīng)聲明的變量用于解構(gòu)賦值录煤,必須非常小心妈踊。如var x;{x}={x=1};這種寫法

會報錯,因為JS引擎會將{x}理解成一個代碼塊從而引發(fā)語法錯誤萝勤,只有不將大括號寫

在行首才可避免敌卓,正確的寫法是({x}={x=1})趟径;

+蜗巧、對象的解構(gòu)賦值可以很方便的將現(xiàn)有對象的方法賦值到某個變量幕屹,如:

let {log,sin,cost}=Math;

+望拖、字符串的解構(gòu)賦值靠娱,const [a,b]=’he’像云,此時a=’h’,b=’e’迅诬,字符串被轉(zhuǎn)換成了一個類似

數(shù)組的對象侈贷,類似數(shù)組的對象都有一個length屬性俏蛮,因此還可以對這個屬性解構(gòu)賦值搏屑;

+辣恋、數(shù)值和布爾值的解構(gòu)賦值伟骨,當(dāng)?shù)忍栍疫吺菙?shù)值和布爾值則會先轉(zhuǎn)化為對象携狭,如:let

{toString:s}=123;s===Number.prototype.toString為true逛腿,解構(gòu)賦值的規(guī)則是鳄逾,只要等號右邊的值不是對象雕凹,就先將其轉(zhuǎn)為對象枚抵。由于undefined和null無法轉(zhuǎn)為對象,所以對它
們進(jìn)行解構(gòu)賦值苦锨,都會報錯舟舒;

+秃励、函數(shù)參數(shù)也可解構(gòu)賦值并可指定默認(rèn)值function move({x, y} = { x: 0, y: 0 }) {

return [x, y];

}

move({x: 3, y: 8}); // [3, 8]

move({x: 3}); // [3, undefined]

move({}); // [undefined, undefined]

move(); // [0, 0]

當(dāng)調(diào)用move函數(shù)時皆尔,傳入的對象會覆蓋函數(shù)定義時指定的默認(rèn)值慷蠕,該默認(rèn)值只在調(diào)用

函數(shù)時不傳參數(shù)起作用砌们;

+浪感、圓括號問題影兽。不能使用圓括號的情況:1 變量聲明語句中不能帶有圓括號峻堰,2 函數(shù)

參數(shù)中捐名,模式不能帶有圓括號镶蹋,3 賦值語句中贺归,不能將整個模式拂酣,或嵌套模式中的一層婶熬,

放在圓括號之中赵颅。可以使用圓括號的情況:賦值語句的非模式部分洲赵,[(b)] = [3]; // 正確

({ p: (d) } = {}); // 正確 [(parseInt.prop)] = [3]; // 正確

3叠萍、字符串的擴(kuò)展

+苛谷、 JS允許用\uxxxx形式表示一個字符腹殿,這種表示只限于\u0000-\uFFFF之間的字符,超過該范圍的字符必須用兩個雙字節(jié)形式表達(dá)刻炒,ES6對這一點做了改進(jìn)坟奥,當(dāng)超過該范圍時爱谁,只要將碼點放入大括號即可访敌,如”\u{20BB7}”可輸出”吉”寺旺;

+、 JS內(nèi)部废赞,字符以UTF-16格式儲存唉地,每個字符固定為2字節(jié)极颓,對于大于0xFFFF的字符群嗤,JS會認(rèn)為是兩個字符狂秘,普通的charCodeAt方法和charAt方法無法正常工作破衔,ES6提供了codePointAt方法和fromCodePoint方法以及at方法可解決這個問題钱烟,codePointAt函數(shù)返回碼點的十進(jìn)制形式;

+曙博、 ES6給字符串添加了Iterator遍歷器接口羊瘩,使得字符串可以被for…of循環(huán)遍歷尘吗,這個遍歷器最大的優(yōu)點是可以識別大于0xFFFF的碼點睬捶;

+擒贸、 ES6提供了除indexOf()方法之外的三個方法:includes(),startsWith(),endsWith()介劫;

+座韵、 ES6提供了repeat()方法踢京,返回一個新字符串瓣距,表示將原字符串重復(fù)n次蹈丸,參數(shù)是小數(shù)時會向下取整慨默,不能為負(fù)或Infinity弧腥,是字符串時會先轉(zhuǎn)為數(shù)字虾攻;

+、 ES7提供了padStart(),padEnd()方法奇钞,用于補全字符串長度景埃,共接受兩個參數(shù)顶别,第一個參數(shù)用來指定字符串的最小長度完慧,第二個參數(shù)是用來補全的字符串屈尼;

+脾歧、 模板字符串鞭执,模板字符串(template string)是增強版的字符串蚕冬,用反引號(`)標(biāo)識。它可以當(dāng)作普通字符串使用获三,也可以用來定義多行字符串疙教,或者在字符串中嵌入變量贞谓,模板字符串中嵌入變量裸弦,需要將變量名寫在${}之中晕城,大括號內(nèi)部可以放入任意的JavaScript表達(dá)式砖顷,可以進(jìn)行運算赃梧,以及引用對象屬性

4几睛、正則表示式的擴(kuò)展

+所森、 字符串對象共有四個方法可使用正則表達(dá)式:match(),replace(),search(),split(),ES6將這4個方法夯接,在語言內(nèi)部全部調(diào)用RegExp的實例方法焕济,從而做到所有與正則相關(guān)的方法,全都定義在RegExp對象上;

+盔几、 添加了u修飾符和y修飾符晴弃,ES5只有i,g,m;

+逊拍、 添加了sticky屬性表示是否設(shè)置了y修飾符上鞠,增加flags屬性返回修飾符,ES5的source屬性是返回正則表達(dá)式的正文芯丧;

+芍阎、 ES5不支持后行斷言和后行否定斷言骗露,ES7中加入了;

5辨赐、數(shù)值的擴(kuò)展

+不恭、 ES6提供了二進(jìn)制和八進(jìn)制數(shù)值的新寫法沾瓦,分別用前綴0b(0B)和0o(0O)表示缕探,ES5的嚴(yán)格模式中八進(jìn)制不再允許使用0表示潭兽,將0b和0o前綴的字符串?dāng)?shù)值轉(zhuǎn)為十進(jìn)制怒坯,要使用Number方法嬉荆;

+限番、 提供了Number.isFinite()和Number.isNaN()兩個方法,用來檢查Infinite和NaN這兩個特殊值,與傳統(tǒng)的全局方法isFinite()和isNaN()的區(qū)別在于缤底,傳統(tǒng)方法先調(diào)用Number()將非數(shù)值的值轉(zhuǎn)為數(shù)值膘流,再進(jìn)行判斷彭谁,而這兩個新方法只對數(shù)值有效,非數(shù)值一律返回false;

+管闷、 ES6將全局方法parseInt()和parseFloat()搀菩,移植到Number對象上面谜洽,行為完全保持不變实束,Number.isInteger()用來判斷一個值是否為整數(shù)避矢。需要注意的是孔庭,在JavaScript內(nèi)部挣菲,整數(shù)和浮點數(shù)是同樣的儲存方法向抢,所以3和3.0被視為同一個值鸠姨,ES6在Number對象上面祟峦,新增一個極小的常量Number.EPSILON婶希,引入一個這么小的量的目的盟猖,在于為浮點數(shù)計算你弦,設(shè)置一個誤差范圍;

+忍法、 JavaScript能夠準(zhǔn)確表示的整數(shù)范圍在-253到253之間(不含兩個端點),超過這個范圍输莺,無法精確表示這個值,Number.isSafeInteger()則是用來判斷一個整數(shù)是否落在這個范圍之內(nèi);

+钟沛、 ES6在Math對象上新增了17個與數(shù)學(xué)相關(guān)的方法。所有這些方法都是靜態(tài)方法牺汤,只能在Math對象上調(diào)用桦沉。

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

+牙甫、 Array.from方法用于將兩類對象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對象(array-like object)和可遍歷(iterable)的對象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)黄绩。值得提醒的是虑凛,擴(kuò)展運算符(...)也可以將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)為數(shù)組,擴(kuò)展運算符背后調(diào)用的是遍歷器接口(Symbol.iterator)帆调,如果一個對象沒有部署這個接口辆床,就無法轉(zhuǎn)換咨堤。Array.from方法則是還支持類似數(shù)組的對象。所謂類似數(shù)組的對象,本質(zhì)特征只有一點疟丙,即必須有l(wèi)ength屬性。因此杯聚,任何有l(wèi)ength屬性的對象故响,都可以通過Array.from方法轉(zhuǎn)為數(shù)組傀广,而此時擴(kuò)展運算符就無法轉(zhuǎn)換。Array.from還可以接受第二個參數(shù)被去,作用類似于數(shù)組的map方法主儡,用來對每個元素進(jìn)行處理奖唯,將處理后的值放入返回的數(shù)組惨缆;

+、 Array.of方法用于將一組值丰捷,轉(zhuǎn)換為數(shù)組坯墨,Array.of(3, 11, 8) // [3,11,8]

Array.of(3) // [3],Array.of(3).length // 1病往;

+捣染、 數(shù)組實例的copyWithin方法,在當(dāng)前數(shù)組內(nèi)部停巷,將指定位置的成員復(fù)制到其他位置

(會覆蓋原有成員)耍攘,然后返回當(dāng)前數(shù)組。也就是說畔勤,使用這個方法蕾各,會修改當(dāng)前數(shù)組;

+庆揪、 數(shù)組實例的find方法式曲,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調(diào)

函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)吝羞,直到找出第一個返回值為true的成員兰伤,然后返回該成員。如果沒有符合條件的成員钧排,則返回undefined敦腔,findIndex方法的用法與find方法非常類似,返回第一個符合條件的數(shù)組成員的位置恨溜,如果所有成員都不符合條件会烙,則返回-1,fill方法使用給定值筒捺,填充一個數(shù)組柏腻;

+、 ES6提供三個新的方法——entries()系吭,keys()和values()——用于遍歷數(shù)組五嫂。它們都返

回一個遍歷器對象(詳見《Iterator》一章),可以用for...of循環(huán)進(jìn)行遍歷肯尺,唯一的

區(qū)別是keys()是對鍵名的遍歷沃缘、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷则吟;

+槐臀、 Array.prototype.includes方法返回一個布爾值,表示某個數(shù)組是否包含給定的值氓仲,與

字符串的includes方法類似水慨。該方法屬于ES7,但Babel轉(zhuǎn)碼器已經(jīng)支持敬扛,沒有該方法之前晰洒,我們通常使用數(shù)組的indexOf方法,檢查是否包含某個值啥箭,indexOf方法有兩個缺點谍珊,一是不夠語義化,它的含義是找到參數(shù)值的第一個出現(xiàn)位置急侥,所以要去比較是否不等于-1砌滞,表達(dá)起來不夠直觀。二是坏怪,它內(nèi)部使用嚴(yán)格相當(dāng)運算符(===)進(jìn)行判斷贝润,這會導(dǎo)致對NaN的誤判;

+陕悬、 關(guān)于數(shù)組空位:ES6則是明確將空位轉(zhuǎn)為undefined题暖;

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

+、 ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值胧卤,即直接寫在參數(shù)定義的后面唯绍,參數(shù)變量是默認(rèn)聲明的,所以不能用let或const再次聲明枝誊;

+况芒、 指定了默認(rèn)值以后,函數(shù)的length屬性叶撒,將返回沒有指定默認(rèn)值的參數(shù)個數(shù)绝骚。也就是說,指定了默認(rèn)值后祠够,length屬性將失真压汪,如果設(shè)置了默認(rèn)值的參數(shù)不是尾參數(shù),那么length屬性也不再計入后面的參數(shù)了古瓤。(function (a = 0, b, c) {}).length // 0 (function (a, b = 1, c) {}).length // 1

+止剖、 ES6引入rest參數(shù)(形式為“...變量名”),用于獲取函數(shù)的多余參數(shù)落君,這樣就不需要使用arguments對象了穿香。rest參數(shù)搭配的變量是一個數(shù)組,該變量將多余的參數(shù)放入數(shù)組中绎速。注意皮获,rest參數(shù)之后不能再有其他參數(shù)(即只能是最后一個參數(shù)),否則會報錯纹冤,函數(shù)的length屬性洒宝,不包括rest參數(shù);

+赵哲、 擴(kuò)展運算符(spread)是三個點(...)待德。它好比rest參數(shù)的逆運算,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列枫夺,由于擴(kuò)展運算符可以展開數(shù)組,所以不再需要apply方法绘闷,將數(shù)組轉(zhuǎn)為函數(shù)的參數(shù)了橡庞;

+、 箭頭函數(shù)印蔗,ES6允許使用“箭頭”(=>)定義函數(shù)扒最,如果箭頭函數(shù)不需要參數(shù)或需要多個參數(shù),就使用一個圓括號代表參數(shù)部分华嘹,如果箭頭函數(shù)的代碼塊部分多于一條語句吧趣,就要使用大括號將它們括起來,并且使用return語句返回,由于大括號被解釋為代碼塊强挫,所以如果箭頭函數(shù)直接返回一個對象岔霸,必須在對象外面加上括號。箭頭函數(shù)有幾個使用注意點俯渤。(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ào)用優(yōu)化

8厌处、對象的擴(kuò)展

+鳖谈、 ES6允許直接寫入變量和函數(shù),作為對象的屬性和方法var foo = 'bar';var baz =

{foo};baz // {foo: "bar"}// 等同于var baz = {foo: foo};

var o = {

method() {

return "Hello!";

}

};

// 等同于

var o = {

method: function() {

return "Hello!";

}

};

+阔涉、 ES6允許字面量定義對象時缆娃,用方法二(表達(dá)式)作為對象的屬性名,即把表達(dá)式放在方括號內(nèi)let propKey = 'foo';let obj = { [propKey]: true, ['a' + 'bc']: 123};

+瑰排、 Object.is()用來比較兩個值是否嚴(yán)格相等贯要,與嚴(yán)格比較運算符(===)的行為基本一致。不同之處只有兩個:一是+0不等于-0椭住,二是NaN等于自身

+崇渗、 Object.assign方法用于對象的合并,將源對象(source)的所有可枚舉屬性京郑,復(fù)制到目標(biāo)對象(target)宅广,Object.assign方法實行的是淺拷貝,而不是深拷貝些举。也就是說跟狱,如果源對象某個屬性的值是對象,那么目標(biāo)對象拷貝得到的是這個對象的引用户魏,Object.assign可以用來處理數(shù)組驶臊,但是會把數(shù)組視為對象挪挤。用途:1為對象添加屬性和方法2克隆對象3合并多個對象4為屬性指定默認(rèn)值

+、 可枚舉性关翎。ES5有三個操作會忽略enumerable為false的屬性扛门,for...in 循環(huán):只遍歷對象自身的和繼承的可枚舉的屬性,Object.keys():返回對象自身的所有可枚舉的屬性的鍵名笤休,JSON.stringify():只串行化對象自身的可枚舉的屬性尖飞,ES6新增了兩個操作,Object.assign():只拷貝對象自身的可枚舉的屬性Reflect.enumerate():返回所有for...in循環(huán)會遍歷的屬性店雅。操作中引入繼承的屬性會讓問題復(fù)雜化政基,大多數(shù)時候,我們只關(guān)心對象自身的屬性闹啦。所以沮明,盡量不要用for...in循環(huán),而用Object.keys()代替

+窍奋、 ES6新增結(jié)構(gòu)Set和Map荐健,Set類似于數(shù)組,但是成員的值都是唯一的琳袄,沒有重復(fù)的值.Set函數(shù)可以接受一個數(shù)組(或類似數(shù)組的對象)作為參數(shù)江场,用來初始化. Set結(jié)構(gòu)的實例有以下屬性。Set.prototype.constructor:構(gòu)造函數(shù)窖逗,默認(rèn)就是Set函數(shù)址否。Set.prototype.size:返回Set實例的成員總數(shù)。add(value):添加某個值碎紊,返回Set結(jié)構(gòu)本身佑附。delete(value):刪除某個值,返回一個布爾值仗考,表示刪除是否成功音同。has(value):返回一個布爾值,表示該值是否為Set的成員秃嗜。clear():清除所有成員权均,沒有返回值。keys():返回一個鍵名的遍歷器values():返回一個鍵值的遍歷器entries():返回一個鍵值對的遍歷器forEach():使用回調(diào)函數(shù)遍歷每個成員痪寻。螺句。Map數(shù)據(jù)結(jié)構(gòu)。它類似于對象橡类,也是鍵值對的集合,但是“鍵”的范圍不限于字符串芽唇,各種類型的值(包括對象)都可以當(dāng)作鍵顾画,可以接受一個數(shù)組作為參數(shù)取劫。該數(shù)組的成員是一個個表示鍵值對的數(shù)組。

9研侣、模塊化

+谱邪、 ES6模塊的設(shè)計思想,是盡量的靜態(tài)化庶诡,使得編譯時就能確定模塊的依賴關(guān)系惦银,以及輸入和輸出的變量。CommonJS和AMD模塊末誓,都只能在運行時確定這些東西扯俱。自動采用嚴(yán)格模式,不管你有沒有在模塊頭部加上"use strict";

+喇澡、 模塊功能主要由兩個命令構(gòu)成:export和import迅栅。export命令用于規(guī)定模塊的對外接口,import命令用于輸入其他模塊提供的功能晴玖;

+读存、 export用法總結(jié):1輸出變量:export var m=1;或者var m=1;export {m} 2輸出函數(shù):export function f(){}或者function(){} export {f} 可以使用as來指定輸出別名

+、 import用法總結(jié):1呕屎、import命令接受一個對象(用大括號表示)让簿,里面指定要從其他模塊導(dǎo)入的變量名。大括號里面的變量名秀睛,必須與被導(dǎo)入模塊對外接口的名稱相同尔当。如果想為輸入的變量重新取一個名字,import命令要使用as關(guān)鍵字琅催,將輸入的變量重命名居凶。注意,import命令具有提升效果藤抡,會提升到整個模塊的頭部侠碧,首先執(zhí)行,2缠黍、如果在一個模塊之中弄兜,先輸入后輸出同一個模塊,import語句可以與export語句寫在一起export { es6 as default } from './someModule';// 等同import { es6 } from './someModule';export default es6;上面代碼中瓷式,export和import語句可以結(jié)合在一起替饿,寫成一行。但是從可讀性考慮贸典,不建議采用這種寫法视卢,而應(yīng)該采用標(biāo)準(zhǔn)寫法,3廊驼、除了指定加載某個輸出值据过,還可以使用整體加載惋砂,即用星號()指定一個對象,所有輸出值都加載在這個對象上面绳锅。這時一般會使用as將()重命名西饵;

+、 export default命令:使用import命令的時候鳞芙,用戶需要知道所要加載的變量名或函數(shù)名眷柔,否則無法加載,該命令可以讓用戶自由命名要加載的變量和函數(shù)原朝。用法和export相似驯嘱,只是第二種用法不能加大括號,且使用import導(dǎo)入默認(rèn)值時也不能加大括號竿拆;

+宙拉、 模塊的繼承:先導(dǎo)入要繼承的模塊,再將其輸出就OK丙笋,其中可以加一下自己的模塊谢澈,export * from 'circle';

10、Class

+御板、 基本語法:class Point{ constructor(x,y){this.x=x;this.y=y} toString(){}} 必須有contructor函數(shù)锥忿,定義的方法是直接定義在原型上的。類的數(shù)據(jù)類型就是函數(shù)怠肋,類本身就指向構(gòu)造函數(shù)敬鬓。類的內(nèi)部所有定義的方法,都是不可枚舉的笙各,這一點與ES5的行為不一致

+钉答、 與函數(shù)一樣,Class也可以使用表達(dá)式的形式定義杈抢。

const MyClass = class Me {

getClassName() {

return Me.name;

}

};

上面代碼使用表達(dá)式定義了一個類数尿。需要注意的是,這個類的名字是MyClass而不是Me惶楼,Me只在Class的內(nèi)部代碼可用右蹦,指代當(dāng)前類

+、 繼承:extends歼捐。子類必須在contructor函數(shù)中調(diào)用super函數(shù)來創(chuàng)建this何陆,super這個關(guān)鍵字,有兩種用法豹储,含義不同贷盲。

(1)作為函數(shù)調(diào)用時(即super(...args)),super代表父類的構(gòu)造函數(shù)剥扣。

(2)作為對象調(diào)用時(即super.prop或super.method())晃洒,super代表父類慨灭。注意朦乏,此時super即可以引用父類實例的屬性和方法球及,也可以引用父類的靜態(tài)方法。

  • 呻疹、 Class的靜態(tài)方法吃引,所有在類中定義的方法,都會被實例繼承刽锤。如果在一個方法前镊尺,加上static關(guān)鍵字,就表示該方法不會被實例繼承并思,而是直接通過類來調(diào)用庐氮,這就稱為“靜態(tài)方法”。

  • 宋彼、 Class的靜態(tài)屬性和實例屬性:類的實例屬性可以用等式弄砍,寫入類的定義之中,不用寫在類的constructor方法里面输涕,類的靜態(tài)屬性只要在上面的實例屬性寫法前面音婶,加上static關(guān)鍵字就可以了

+、 new.target屬性 new是從構(gòu)造函數(shù)生成實例的命令莱坎。ES6為new命令引入了一個new.target屬性衣式,(在構(gòu)造函數(shù)中)返回new命令作用于的那個構(gòu)造函數(shù)。如果構(gòu)造函數(shù)不是通過new命令調(diào)用的檐什,new.target會返回undefined碴卧,因此這個屬性可以用來確定構(gòu)造函數(shù)是怎么調(diào)用的。

11乃正、編程規(guī)范

+住册、 使用let代替var;

+烫葬、 靜態(tài)字符串一律使用單引號或反引號界弧,不使用雙引號。動態(tài)字符串使用反引號搭综;

+垢箕、 使用數(shù)組成員對變量賦值時,優(yōu)先使用解構(gòu)賦值兑巾,函數(shù)的參數(shù)如果是對象的成員条获,優(yōu)先使用解構(gòu)賦值,如果函數(shù)返回多個值蒋歌,優(yōu)先使用對象的解構(gòu)賦值帅掘,而不是數(shù)組的解構(gòu)賦值委煤。這樣便于以后添加返回值,以及更改返回值的順序修档。

+碧绞、 單行定義的對象,最后一個成員不以逗號結(jié)尾吱窝。多行定義的對象讥邻,最后一個成員以逗號結(jié)尾。對象盡量靜態(tài)化院峡,一旦定義兴使,就不得隨意添加新的屬性。如果添加屬性不可避免照激,要使用Object.assign方法发魄,如果對象的屬性名是動態(tài)的,可以在創(chuàng)造對象的時候俩垃,使用屬性表達(dá)式定義励幼。

+、 使用擴(kuò)展運算符(...)拷貝數(shù)組吆寨,使用Array.from方法赏淌,將類似數(shù)組的對象轉(zhuǎn)為數(shù)組

+、 那些需要使用函數(shù)表達(dá)式的場合啄清,盡量用箭頭函數(shù)代替六水。因為這樣更簡潔,而且綁定了this辣卒。簡單的掷贾、單行的、不會復(fù)用的函數(shù)荣茫,建議采用箭頭函數(shù)想帅。如果函數(shù)體較為復(fù)雜,行數(shù)較多啡莉,還是應(yīng)該采用傳統(tǒng)的函數(shù)寫法港准。所有配置項都應(yīng)該集中在一個對象,放在最后一個參數(shù)咧欣,布爾值不可以直接作為參數(shù)

+浅缸、 不要在函數(shù)體內(nèi)使用arguments變量,使用rest運算符(...)代替。因為rest運算符顯式表明你想要獲取參數(shù),而且arguments是一個類似數(shù)組的對象楚殿,而rest運算符可以提供一個真正的數(shù)組贺纲,使用默認(rèn)值語法設(shè)置函數(shù)參數(shù)的默認(rèn)值

+毛萌、 總是用Class苟弛,取代需要prototype的操作,使用extends實現(xiàn)繼承阁将,因為這樣更簡單膏秫,不會有破壞instanceof運算的危險,使用import取代require冀痕,使用export取代module.exports荔睹,如果模塊只有一個輸出值,就使用export default言蛇,如果模塊有多個輸出值,就不使用export default宵距,不要export default與普通的export同時使用

12腊尚、一些補充

  • ECMAScript 和 JavaScript 的關(guān)系
    簡單說就是規(guī)范和實現(xiàn)的關(guān)系,前者負(fù)責(zé)指定規(guī)范满哪,后者負(fù)責(zé)實現(xiàn)婿斥。此外 ES2015=ES6

13、一些面試題回答

  • let 哨鸭、const和var有什么區(qū)別
    1民宿、作用域不同,var 是全局作用域像鸡,let 活鹰、const有自己的塊級作用域
    2、let 只估、const不存在變量提升志群,必須先申明后使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛔钙,隨后出現(xiàn)的幾起案子锌云,更是在濱河造成了極大的恐慌,老刑警劉巖吁脱,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桑涎,死亡現(xiàn)場離奇詭異,居然都是意外死亡兼贡,警方通過查閱死者的電腦和手機(jī)攻冷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紧显,“玉大人讲衫,你說我怎么就攤上這事。” “怎么了涉兽?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵招驴,是天一觀的道長。 經(jīng)常有香客問我枷畏,道長别厘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任拥诡,我火速辦了婚禮触趴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渴肉。我一直安慰自己冗懦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布仇祭。 她就那樣靜靜地躺著披蕉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乌奇。 梳的紋絲不亂的頭發(fā)上没讲,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音礁苗,去河邊找鬼爬凑。 笑死,一個胖子當(dāng)著我的面吹牛试伙,可吹牛的內(nèi)容都是我干的嘁信。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼迁霎,長吁一口氣:“原來是場噩夢啊……” “哼吱抚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起考廉,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤秘豹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昌粤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體既绕,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年涮坐,在試婚紗的時候發(fā)現(xiàn)自己被綠了凄贩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡袱讹,死狀恐怖疲扎,靈堂內(nèi)的尸體忽然破棺而出昵时,到底是詐尸還是另有隱情,我是刑警寧澤椒丧,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布壹甥,位于F島的核電站,受9級特大地震影響壶熏,放射性物質(zhì)發(fā)生泄漏句柠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一棒假、第九天 我趴在偏房一處隱蔽的房頂上張望溯职。 院中可真熱鬧,春花似錦帽哑、人聲如沸谜酒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甚带。三九已至,卻和暖如春佳头,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晴氨。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工康嘉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人籽前。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓亭珍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枝哄。 傳聞我的和親對象是個殘疾皇子肄梨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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

  • 三,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn)挠锥,只要將碼點放入大括號众羡,就能正確解讀該字符。有了這...
    eastbaby閱讀 1,539評論 0 8
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,783評論 0 1
  • 一. let 和 const 1 let 基本用法 ES6新增let命令,與var用法類似,但所聲明的變量只在聲明...
    dodomix閱讀 2,300評論 0 2
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)蓖租,也就是一...
    悟名先生閱讀 4,151評論 0 13
  • 早餐從小就是最不喜歡吃的一餐飯粱侣,因為為了吃個早餐付出的代價太大了,需要早睡蓖宦、需要早起齐婴。。稠茂。每次上學(xué)前為了吃個早餐都...
    王靖_533f閱讀 290評論 0 1