ES6

let , const
  • constlet 的區(qū)別:1. 聲明時(shí)必須賦值 2.只能賦值一次
  • let 存在暫時(shí)性死區(qū):let會(huì)使變量作用域綁定在當(dāng)前塊內(nèi)隅俘;那么這個(gè)變量在let之前是未定義的了袁,但它又不能取父作用域的同名變量的值
    暫時(shí)性死區(qū)
for(let i=0;i<3;i++){
  //此時(shí)i的作用域就在括號(hào)內(nèi)
  //但js會(huì)自動(dòng)幫用戶在花括號(hào)內(nèi)創(chuàng)建一個(gè)同名臨時(shí)變量i,使得i在打印時(shí)不會(huì)固定變?yōu)?
  button[i].onclick = ()=>{
    console.log(i)
  }
}
Symbol

當(dāng)我不關(guān)心一個(gè)一個(gè)變量的值蹲缠,只希望區(qū)分該變量與其他變量時(shí)
x = Symbol()

默認(rèn)參數(shù)值
  • 當(dāng)傳給函數(shù)的參數(shù)值為undefined時(shí)艘虎,默認(rèn)參數(shù)值會(huì)生效
  • function x(a,...b) {} 得到的b是一個(gè)數(shù)組
  • 偽數(shù)組轉(zhuǎn)數(shù)組兩種方法
let arr = Array.from(arguments)
let arr = [...arguments]
  • 簡(jiǎn)單的值交換
let [a,b] = [1,2];
[a,b] = [b,a]
console.log(a,b) //2,1

需要特別注意的是唉侄,在這種情況下,值交換的前一句結(jié)束分號(hào)一定不能省略野建,否則會(huì)出錯(cuò)

  • 雙層解構(gòu)賦值
var obj = {x:{b:1}}
var {x:属划} = obj
console.log(b) //1
//先 x = obj.x 而后 b = x.b
  • Object.assign()是淺拷貝恬叹,或者說只能深拷貝一層
對(duì)象屬性增強(qiáng)
  • let obj = {x,y}
  • 對(duì)象聲明時(shí)鍵名可以用表達(dá)式
模塊化
  • 依賴:用到了別的模塊
  • 導(dǎo)出:給別的模塊用
  • 在不同模塊中多次導(dǎo)入同一個(gè)模塊,該模塊也只會(huì)被下載一次同眯,但會(huì)執(zhí)行多次
  • import 語(yǔ)句只能在聲明了 type="module" 的 script 的標(biāo)簽中使用
import defaultExport from "module-name";
import * as name from "module-name";
import { export } from "module-name";
import { export as alias } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
  • export
export { name1, name2, …, nameN };
export default expression;
export * from …;//模塊透?jìng)?
class
  • 如何不用class實(shí)現(xiàn)繼承
function Animal(){
  this.a = 1
}
Animal.prototype.move = function(){}
function Human(){
  Animal.apply(this,aruguments)
  this.b = 2
}
let f = function(){}
f.prototype = Animal.prototype
Human.prototype = new f()
Human.prototype.constructor = Human
轉(zhuǎn)自知乎《JS的new到底是干什么的》——方應(yīng)杭
  • 使用class實(shí)現(xiàn)繼承
class Human extends Animal{
  constructor(){
    super()
  }
}
  • 類:擁有共同屬性的對(duì)象
  • constructor用于構(gòu)造自有屬性
  • extends會(huì)使原型鏈再多一層
  • 在繼承時(shí)绽昼,用到了this就要在使用前加super()
  • class不支持公有屬性是非函數(shù)
  • get設(shè)置可讀不可寫的屬性
class Human{  
  constructor(age){
    this._age = age
  }
  get age (){
    return this._age
  }
}
var human = new Human(19)
console.log(human.age) // 19
  • 用set對(duì)屬性的寫操作進(jìn)行響應(yīng)的限制
class Human{  
  constructor(name){
    this._name = name
  }
  set name (value){
    if(value>4){console.log('名字長(zhǎng)度不能超過4個(gè)字')}
    else{this._name = value}
  }
}
var human = new Human('yyh')
human.name('哈哈哈哈哈哈哈') //名字長(zhǎng)度不能超過4個(gè)字
  • static 用于聲明構(gòu)造函數(shù)的靜態(tài)方法

promise

  • promise解決了多層的異步嵌套。增加了代碼的可讀性
  • 手寫promise
function fn (){
  return new Promise((resolve,reject)=>{
    if(x){resolve()}
    else{reject()}
}
function rs1(){
  //...
  if(x){return Promise.resolve()//如果不寫明返回值须蜗,默認(rèn)返回resolve 
  }else{ return Promise.reject()}
}

}
function rj1(){
   if(x){return Promise.resolve()//如果不寫明返回值绪励,默認(rèn)返回resolve 
  }else{ return Promise.reject()}
}
fn().then(rs1,rj1)
promise.catch()
  • 如果作為參數(shù)的 Promise 實(shí)例,自己定義了catch方法唠粥,那么它一旦被rejected,并不會(huì)觸發(fā)Promise.all()的catch方法停做。因?yàn)閳?zhí)行完它自己的catch方法后晤愧,該實(shí)例的狀態(tài)也會(huì)變成resolved
  • 只要函數(shù)中有錯(cuò)誤,就會(huì)進(jìn)入reject() 蛉腌,而reject()等同于拋出錯(cuò)誤官份。Promise 對(duì)象的錯(cuò)誤具有“冒泡”性質(zhì),會(huì)一直向后傳遞烙丛,直到被捕獲為止舅巷。也就是說,錯(cuò)誤總是會(huì)被下一個(gè)catch語(yǔ)句捕獲河咽。
  • 比較下面兩種寫法
// bad
promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  });

// good
promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

上面代碼中钠右,第二種寫法要好于第一種寫法,理由是第二種寫法可以捕獲前面then方法執(zhí)行中的錯(cuò)誤忘蟹。應(yīng)該說如果想要捕獲then方法執(zhí)行中的錯(cuò)誤飒房,應(yīng)該這么寫

promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  }).then(function(data){},function(err){});

then的第二個(gè)參數(shù),只能處理上一層函數(shù)的錯(cuò)誤媚值,而不能處理上上層的錯(cuò)誤狠毯,所以第二種寫法優(yōu)于第一種寫法

  • 跟傳統(tǒng)的try/catch代碼塊不同的是,如果沒有使用catch方法指定錯(cuò)誤處理的回調(diào)函數(shù)褥芒,Promise 對(duì)象拋出的錯(cuò)誤不會(huì)傳遞到外層代碼嚼松,即不會(huì)有任何反應(yīng)。這就是說锰扶,Promise 內(nèi)部的錯(cuò)誤不會(huì)影響到 Promise 外部的代碼献酗,通俗的說法就是“Promise 會(huì)吃掉錯(cuò)誤”。
Promise.prototype.finally()
  • finally方法用于指定不管 Promise 對(duì)象最后狀態(tài)如何坷牛,都會(huì)執(zhí)行的操作凌摄。
Promise.all()
  • 參數(shù)是由promise對(duì)象構(gòu)成的數(shù)組
  • 返回值分兩種,數(shù)組內(nèi)promise對(duì)象的狀態(tài)都為成功后漓帅,返回對(duì)象成功后的返回值構(gòu)成的數(shù)組锨亏;數(shù)組內(nèi)promise對(duì)象有一個(gè)失敗痴怨,返回第一個(gè)失敗的對(duì)象的返回值
promise.race()
  • const p = Promise.race([p1, p2, p3]);
  • 上面代碼中,只要p1器予、p2浪藻、p3之中有一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變乾翔。那個(gè)率先改變的 Promise 實(shí)例的返回值爱葵,就傳遞給p的回調(diào)函數(shù)。

async&await

  • async function 用于聲明一個(gè)返回Promise對(duì)象的函數(shù)反浓。該函數(shù)內(nèi)部會(huì)有異步操作萌丈。async的優(yōu)點(diǎn)在于處理 then 鏈,該聲明使異步函數(shù)看起來像同步函數(shù)一樣
  • async 函數(shù)中可能會(huì)有 await雷则,await后面接一個(gè)Promise對(duì)象辆雾,這會(huì)使 async 函數(shù)暫停執(zhí)行,等待 Promise 的結(jié)果出來月劈,然后恢復(fù)async函數(shù)的執(zhí)行并返回解析值(resolved)度迂。
  • 正常情況下,await可以接一個(gè) Promise 對(duì)象猜揪,返回該對(duì)象的結(jié)果惭墓。它會(huì)阻塞后面的代碼,如果不是 Promise 對(duì)象而姐,就直接返回對(duì)應(yīng)的值腊凶。
  • 任何一個(gè)await語(yǔ)句后面的 Promise 對(duì)象變?yōu)閞eject狀態(tài),那么整個(gè)async函數(shù)都會(huì)中斷執(zhí)行拴念。
  • 這篇文章寫的是真真好:https://segmentfault.com/a/1190000007535316
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吭狡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丈莺,更是在濱河造成了極大的恐慌划煮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缔俄,死亡現(xiàn)場(chǎng)離奇詭異弛秋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俐载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蟹略,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遏佣,你說我怎么就攤上這事挖炬。” “怎么了状婶?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵意敛,是天一觀的道長(zhǎng)馅巷。 經(jīng)常有香客問我草姻,道長(zhǎng)撩独,這世上最難降的妖魔是什么综膀? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任橄登,我火速辦了婚禮,結(jié)果婚禮上暂论,老公的妹妹穿的比我還像新娘取胎。我一直安慰自己闻蛀,他們只是感情好觉痛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俐芯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贸营。 梳的紋絲不亂的頭發(fā)上莽使,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天灵再,我揣著相機(jī)與錄音,去河邊找鬼汪榔。 笑死痴腌,一個(gè)胖子當(dāng)著我的面吹牛士聪,可吹牛的內(nèi)容都是我干的剥悟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胀糜!你這毒婦竟也來了教藻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤讥电,失蹤者是張志新(化名)和其女友劉穎恩敌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恢口,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡问潭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年梳虽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了是复。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淑廊。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啥繁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情适室,我是刑警寧澤蔬螟,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布整袁,位于F島的核電站坐昙,受9級(jí)特大地震影響疾棵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一谓娃、第九天 我趴在偏房一處隱蔽的房頂上張望奶稠。 院中可真熱鬧,春花似錦涩搓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至常侦,卻和暖如春浇冰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聋亡。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工肘习, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坡倔。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓漂佩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親罪塔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子投蝉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 含義 async函數(shù)是Generator函數(shù)的語(yǔ)法糖,它使得異步操作變得更加方便征堪。 寫成async函數(shù)瘩缆,就是下面這...
    oWSQo閱讀 1,987評(píng)論 0 2
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個(gè)人版提純! babel babel負(fù)責(zé)將JS高級(jí)語(yǔ)法轉(zhuǎn)義佃蚜,...
    Devildi已被占用閱讀 1,970評(píng)論 0 4
  • 前面的話 ES2017標(biāo)準(zhǔn)引入了async 函數(shù)庸娱,使得異步操作變得更加方便。本文將詳細(xì)介紹async函數(shù) 概述 a...
    CodeMT閱讀 1,333評(píng)論 0 3
  • Promiese 簡(jiǎn)單說就是一個(gè)容器谐算,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果熟尉,語(yǔ)法上說,Pr...
    雨飛飛雨閱讀 3,348評(píng)論 0 19
  • 以下內(nèi)容是我在學(xué)習(xí)和研究ES6時(shí)氯夷,對(duì)ES6的特性臣樱、重點(diǎn)和注意事項(xiàng)的提取靶擦、精練和總結(jié)腮考,可以做為ES6特性的字典;在本...
    科研者閱讀 3,111評(píng)論 2 9