1.for循環(huán)括號內(nèi)作用域與循環(huán)體作用域不同
2.let const聲明的變量有暫時性死區(qū)
3.塊級作用域必須有大括號
4.對象凍結(jié):object.freeze();
徹底凍結(jié)

5.let const class聲明的對象不是全局對象屬性。
6.ES2020中設置了globalthis作為所有環(huán)境下的全局對象。
7.解構賦值
????用處:取函數(shù)返回值,取json值
? ? 要求:具有l(wèi)terator接口,結(jié)構不成功就是undefined
????1.數(shù)組解構賦值:對應模式相同的位置賦值
????2.當嚴格等于undefined是默認值生效,如果是表達式惰性求值
? ? ?3.對象的解構賦值:和key相同賦值,賦值的是變量不是key,key賦值完是undefined,可以取得繼承值
????4.數(shù)組和對象可以嵌套賦值
????5.對象可以給數(shù)組賦值
????6.字符串也可以賦值
????7.等號右邊不是對象就先轉(zhuǎn)成對象再賦值
????8.給函數(shù)參數(shù)賦值中,只要傳了值就不用取默認值,給參數(shù)默認值還是給參數(shù)內(nèi)的變量默認值
8.字符串拓展
????? 1.增加遍歷器,可識別大于0xFFFF碼點
????? 2.模板字符串:反引號標識,保留空格換行,${}鑲嵌變量,變量沒有聲明就會報錯,不是string調(diào)用tostring方法
9.正則擴展:y修飾符,粘連匹配
10.三點運算符:將取出參數(shù)對象中的所有可遍歷屬性,拷貝到當前對象之中。
11.number擴展
????Number.isFinite ,isNaN,前者非數(shù)值一律返回flase,后者非NaN一律返回flase,只對數(shù)值有效
????將parseint,parsefloat移植到number對象上。
????Math對象擴展,Math.trunc? 直接去除小數(shù)部分
12.函數(shù)擴展
????????默認參數(shù)單獨形成一個作用域,
????????將arguments類數(shù)組對象轉(zhuǎn)換成rest對象真數(shù)組,增加length屬性,值為沒有指定默認值的參數(shù)個數(shù),不包括rest參數(shù)
????????bind:創(chuàng)建一個新函數(shù),綁定執(zhí)行對上到參數(shù)對象上。
????????apply:馬上執(zhí)行調(diào)用它的函數(shù),參數(shù)為數(shù)組
????????call:馬上執(zhí)行調(diào)用它的函數(shù),參數(shù)時單個傳遞的
13.箭頭函數(shù)
????? 1.沒有/大于1參數(shù)要用圓括號,多余一條語句,要用大括號括起來。
????? 2.this對象是定義時就在的對象,沒有arguments對象,不能做generator函數(shù)
????? 3.不適用場合:定義對象方法,需要動態(tài)this時,比如監(jiān)聽事件。
14.數(shù)組常用方法
????? 1.push/pop? 改變原數(shù)組,向數(shù)組末尾添加一個元素,返回數(shù)組新的長度。
????? 2.shift/unshfit? 前面, 改變原數(shù)組
? ? ? 3.concat? 返回新數(shù)組,原來的數(shù)組不變
? ????4.join 將字符用連接符連接返回
????? 5.sort(function) 默認按unicode排序,也可以按照function指定順序
? ????6.map /foreach/fliter/reduce 調(diào)用每個元素,前者返回新數(shù)組,后者返回undefined。fliter返回新數(shù)組,元素為符合條件的元素,reduce遞歸迭代
? ????7.slice/splice slice同字符串slice ,splice(index,howmach,arr1)刪除howmuch個元素,并插入arr1
????? 8.every/some,返回boolean,相當于對每個元素并或操作
15.數(shù)組擴展
????? 1.三點運算符與rest參數(shù),三點運算符將數(shù)組轉(zhuǎn)為逗號分割的序列,rest參數(shù)將逗號分割的序列合并成一個數(shù)組??諗?shù)組不產(chǎn)生任何效果。只有在函數(shù)調(diào)用時,擴展運算符參可以放入圓括號中。數(shù)組賦值只能放在最后。
????? 2.Array.from,將類數(shù)組對象和遍歷器對象轉(zhuǎn)換成數(shù)組
????? 3.fill填充
????? 4.keys,values,entries,返回遍歷器對象,再用for of遍歷
????? 5.ES5處理空位:
????????forEach(), filter(), reduce(), every() 和some()都會跳過空位。
????????map()會跳過空位,但會保留這個值
????????join()和toString()會將空位視為undefined,而undefined和null會被處理成空字符串。
? ? ? ? ES6將空位轉(zhuǎn)換為undefined
16.Symbol表示獨一無二的值,新的基本類型
? ????1.構造函數(shù)接受一個字符串作為描述
? ????2.即使參數(shù)相同,得到的Symbol也是不一樣的
? ????3.能別的數(shù)據(jù)類型運算會報錯
????? 4.轉(zhuǎn)為boolean值為true
????? 5.作為屬性名時不能用點運算符賦予
? ????6.在對象內(nèi)部的定義屬性時只能放在方括號里
????? 7.用于消除魔法字符串
????? 8.不會被普通的遍歷機制遍歷,可以用Reflect.ownKeys? API遍歷
????? 9.Symbol.for? 可以查看某個Symbol值使用過沒有,使用過則重新用,沒使用過就注冊一個新的
17.Set和Map-新的引用型對象,增強數(shù)組和對象
????? Set:值唯一的數(shù)組,接受數(shù)組初始化,NaN等于自身
? ????方法:
????? 1.操作方法;add , delete, clear,has
? ???? 2.遍歷方法:遍歷順序時插入順序,類似隊列
????????? keys? values entries? foreach 默認values方法遍歷
? ? ? ?Map:key可以不是字符串的對象
18.commonjs? AMD? ES6
????CommonJS:服務器端模塊規(guī)范,模塊同步加載,輸出值的緩存
????? 1.單獨文件作為模塊,單獨作用域
????? 2.module.exprots輸出對象
????? 3.require讀取文件并執(zhí)行,返回module.exprots對象
????AMD:異步模塊定義,requireJS
????ES6:統(tǒng)一服務器和瀏覽器模塊化規(guī)范
????? export 對外輸出接口 動態(tài)綁定
????? import 靜態(tài)加載,按需加載,加載模塊,變量名要與輸出的變量名一致,變量只讀
? ? ? ?as 重命名
????? * 全部加載
????????export defualt? 輸出的變量不需要用同名變量接
????????import()動態(tài)加載,返回promise對象
19.Class語法糖
????? ? 1.constructor函數(shù)定義的屬性是實例自己的屬性相當于之前的構造函數(shù)
????? ? 2.其他函數(shù)均定義在原型上,供所有實例調(diào)用
????? ? 3.getter,setter,攔截屬性
? ????? 4.靜態(tài)方法:直接在類上調(diào)用,不被實例繼承,但可以被子類繼承,繼承extends
20.構造函數(shù)和原型對象
????構造函數(shù)自身的屬性和方法無法被共享,而原型對象的屬性和方法可以被所有實例對象所共享。
? ? Object:
? ? ? getPrototypeOf 返回對象的原型
? ? ? setPrototypeOf(nowobject,newobject)為現(xiàn)對象設置原型對象
? ? ? create(object) 以此為原型生成對象
? ? ? assign(target,soures....)將任意多個源對象可枚舉屬性拷貝給目標對象
? ? ? defineProperties(obj)添加或修改自有屬性
? ? ? getOwnPropertyNames (obj)返回自身屬性名包括不可枚舉的屬性
? ? ? keys(obj) 返回可枚舉屬性
? ? Object.prototype:
? ? ? isPrototypeOf:A是否為B的原型
? ? ? propertyEnumerable: 判斷是否可枚舉
21.對象的擴展
????? 1.描述對象:object.getOwnPropertyDescriptor
? ???? 2.對象循環(huán)與枚舉:盡量用object.keys()遍歷
? ? ? ? for...in 遍歷對象自身的和繼承的和可枚舉的
? ? ? ? object.keys()對象自身可枚舉
? ? ? ? object.assign拷貝自身可枚舉
? ? ? ? object.getOwnPropertyNames自身可枚舉+不可枚舉
? ? ? ? object.getOwnpropertySymbols 返回Symbol屬性鍵名
? ? ? ? ?reflect.ownKeys所有鍵名
? ? ? 遍歷順序:
? ? ? ? 首先遍歷所有數(shù)值鍵,按照數(shù)值升序排列。
? ? ? ? 其次遍歷所有字符串鍵,按照加入時間升序排列。
? ? ? ? 最后遍歷所有 Symbol 鍵,按照加入時間升序排列。
????? 3.三點運算符:將所有自身可遍歷但尚未被讀取的屬性淺拷貝到新對象上。非對象報錯。
????? 4.鏈判斷運算符 ?.
????? 5.Null判斷運算符 ??
????? 6.深拷貝:序列化和反序列化,reflect.ownkeys遍歷,lodash庫
22.新增方法
? ? 1.object.assign,只能拷貝原始對象自身的值,不能克隆繼承的值,想要克隆值可以
? ? object.assign(object.create(object.getprototypeof(obj)),origin),symbol值也會被拷貝
? ? ? ? 用途:
? ? ? ? ? ? 1.為對象增加屬性
? ? ? ? ? ? 2.為對象添加方法
? ? ? ? ? ? 3.克隆對象
? ? 3.object.getownpropertydescriptors:返回描述對象,主要解決object.assign不能拷貝get set方法問題

? ? ? 4.object.getprototypeof? object.setprototypeof? ? object.create
23.promise,異步編程,為解決回調(diào)函數(shù)hell 出現(xiàn)
? ? ? 1.Promise對象,異步事件包含容器,對象狀態(tài)不受外界影響,一旦狀態(tài)改變就不會再改變
? ? ? 2.狀態(tài):pending 進行中? fulfilled已成功? rejected 已失敗
? ? ? 3.缺點:
? ? ? ? ? ? ? 無法取消? ? ? 不設置回調(diào)函數(shù),內(nèi)部錯誤無法捕捉 ,pending狀態(tài)無法查看進度
? ? ? 4.使用:
? ? ? ? ? ? new Promise(function(resolve->將狀態(tài)改變?yōu)槌晒?reject->將狀態(tài)改為失敗,并傳出報錯){})? ? 實例生成后可用 then函數(shù)指定成功,失敗的回調(diào)函數(shù) then(function1,function2)參數(shù)為promise參數(shù)傳出對象
? ? ? 5.特點:promise新建后馬上執(zhí)行
? ? ? 6.resolve,reject參數(shù):會將這個函數(shù)傳遞給回調(diào)函數(shù),如果參數(shù)是promise對象,主promise自身狀態(tài)無效,按照參數(shù)promise狀態(tài)觸發(fā)回調(diào)。
? ? ? 7.then:方法返回新的promise實例,前一個then,return的值作為下一個then的參數(shù),只能接受函數(shù)作為參數(shù),不是函數(shù)直接跳過。
? ? ? 8.catch:對前面promise對象錯誤的捕獲,不指定錯誤無法被捕獲,promise內(nèi)部報錯不會影響外部代碼執(zhí)行
? ? ? 9.finally:不管對象最終狀態(tài)如何都會執(zhí)行這個回調(diào)
? ? ? 10.一些函數(shù):
? ? ? ? ? ? ? 1.promise.all([p1,p2,p3]):參數(shù)可以不是數(shù)組但必須有遍歷器接口
? ? ? ? ? ? ? ? ? ? ? p的狀態(tài):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.所有成功才會變成成功,返回所有實例返回值組成的數(shù)組
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.有一個reject就會reject,返回值為第一個reject的返回值
? ? ? ? ? ? ? ? ? ? ? 注意:如果參數(shù)promise對象自己捕獲了錯誤,p不會接收到錯誤
? ? ? ? ? ? 2.promise.race([p1,p2,p3]):
? ? ? ? ? ? ? ? ? ? ? p的狀態(tài):就是參數(shù)中第一個改變的狀態(tài)
? ? ? ? ? ? 3.promise.allSettled([p1,p2,p3]):
? ? ? ? ? ? ? ? ? ? ? p的狀態(tài):等所有參數(shù)實例都完成后(無論成功還是失?。蜁兂蒮ulfilled
? ? ? ? ? ? ? ? ? ? ? 回調(diào)函數(shù)參數(shù)是promise實例數(shù)組
? ? ? ? ? ? 4.promise.any([p1,p2,p3]):
? ? ? ? ? ? ? ? ? ? ? p的狀態(tài):有一個成功就成功,所有失敗才失敗
? ? ? ? ? ? 5.promise.resolve():
? ? ? ? ? ? ? ? ? ? ? 1.參數(shù)是promise實例:原封不動返回這個實例
? ? ? ? ? ? ? ? ? ? ? 2.thenable對象:轉(zhuǎn)成promise對象,再馬上把then方法加入異步隊列
? ? ? ? ? ? ? ? ? ? ? 3.不是thenable對象或不是對象:返回新的promise實例,再將狀態(tài)變成成功。
? ? ? ? ? ? ? ? ? ? ? 4.不帶任何參數(shù):同3,then回調(diào)無參數(shù)
? ? ? ? ? ? ? ? ? ? ? 5.立即resolve的promise在本輪事件循環(huán)結(jié)尾執(zhí)行
? ? ? ? ? ? 6.promise.reject():返回一個狀態(tài)為reject的promise對象,catch參數(shù)是該函數(shù)的參數(shù)
24.iterator遍歷器
? ? 1.作用:提供統(tǒng)一的遍歷接口
? ? ? ? ? ? ? ? 使元素按某種次序排序
? ? ? ? ? ? ? ? 供for of消費
? ? 2.默認的iterator接口部署在數(shù)據(jù)結(jié)構的Symbol.iterator屬性上,執(zhí)行這個函數(shù)會返回一個遍歷器
? ? 3.使用接口遍歷的場合:
? ? ? ? ? ? ? 1.解構賦值
? ? ? ? ? ? ? 2.擴展運算符
? ? ? ? ? ? ? 3.接受數(shù)組作為參數(shù)的場合,數(shù)組的遍歷器接口只返回具有數(shù)字索引的屬性
? ? 4.for in遍歷對象,for of遍歷數(shù)組
25.Generator狀態(tài)機? ?
? ? ? 1.函數(shù)語法
? ? ? ? ? ? 1.寫法:function * name(){} ,函數(shù)內(nèi)部有 yield 表達式定義每個狀態(tài)
? ? ? ? ? ? 2. 函數(shù)調(diào)用: 返回一個遍歷器對象,用next方法移動,遇到y(tǒng)ield表達式就暫停執(zhí)行,將yield表達式后面的表達式值返回,作為value的值,如此這般直到return,沒有return則返回對象的value屬性值為undefined
? ? ? ? ? ? 3.next方法調(diào)用:返回一個有value和done屬性的內(nèi)部狀態(tài)對象
? ? ? ? ? ? 4.yield表達式只能放在generator函數(shù)內(nèi),如果在另一個表達式中,必須放在圓括號里面,用作參數(shù)或賦值表達式的右邊,可以不加括號
? ? ? ? ? ? 5.next方法參數(shù):函數(shù)內(nèi)部的yield表達式?jīng)]有返回值,若想將前一步狀態(tài)傳到下一步就在next函數(shù)中添加參數(shù)? ? ?
? ? ? ? ? ? 6.for of遍歷generator函數(shù)返回的遍歷器對象,最后一個值不會返回
? ? ? ? ? ? 7.for of循環(huán),拓展運算符,解構賦值,Array.from都是使用這個遍歷器對象
? ? ? ? ? ? 8.原型函數(shù):
? ? ? ? ? ? ? ? 1.Generator.prototype.throw:遍歷器對象在函數(shù)體外拋出錯誤,函數(shù)體內(nèi)捕獲,如果函數(shù)體內(nèi)沒有部署try...catch代碼塊,將會被外部的try...catch代碼塊捕捉,throw方法被捕獲以后,會附帶執(zhí)行yield表達式,不影響遍歷,一旦內(nèi)部錯誤沒有被捕獲,函數(shù)運行提前結(jié)束。
? ? ? ? ? ? ? ? 2.Generator.prototype.return:返回給定的值,并終結(jié)函數(shù),不提供參數(shù),返回對象value為undefined
? ? ? ? ? ? 9.next,throw,return:
? ? ? ? ? ? ? ? ? next函數(shù)是將yield表達式替換成一個值
? ? ? ? ? ? ? ? ? throw函數(shù)是將yield表達式替換成一個throw語句
? ? ? ? ? ? ? ? return是將yield表達式替換成一個return語句
? ? ? ? ? ? 10.yield *:用在Generator函數(shù)內(nèi)部調(diào)用另一個generator函數(shù),后面跟一個遍歷器對象,遍歷遍歷器對象? ?
? ? ? ? ? ? 11.作為對象屬性:簡寫成 * functionname(){}
? ? ? ? ? ? 12.協(xié)程與線程:,同一時間可以有多個線程處于運行狀態(tài),但是運行的協(xié)程只能有一個,其他協(xié)程都處于暫停狀態(tài)。此外,普通的線程是搶先式的,到底哪個線程優(yōu)先得到資源,必須由運行環(huán)境決定,但是協(xié)程是合作式的,執(zhí)行權由協(xié)程自己分配。
26.Generator函數(shù)的異步應用
? ? ? ? ? 1.特性:Generator 函數(shù)可以暫停執(zhí)行和恢復執(zhí)行,函數(shù)體內(nèi)外的數(shù)據(jù)交換和錯誤處理機制。
? ? ? ? ? 2.Thunk函數(shù),傳名調(diào)用,將多參數(shù)函數(shù)轉(zhuǎn)換成一個只接受回調(diào)函數(shù)作為參數(shù)的函數(shù)
? ? ? ? ? 3.Thunkify模塊:將控制權由回調(diào)函數(shù)返回。
? ? ? ? ? 4.co模塊:將控制權由promise.then返回
? ? ? ? ? 5.async/await:
? ? ? ? ? ? ? 1.與Generator區(qū)別:自帶執(zhí)行器,await命令后面可以是promise對象和原始類型的值,返回值是promise對象。
? ? ? ? ? ? ? 2.語法:
? ? ? ? ? ? ? ? ? 1.async函數(shù)內(nèi)部的return語句的值會作為then方法回調(diào)函數(shù)的參數(shù)。
? ? ? ? ? ? ? ? ? 2.async函數(shù)內(nèi)部拋出錯誤,會導致返回的 Promise 對象變?yōu)閞eject狀態(tài)。拋出的錯誤對象會被catch方法回調(diào)函數(shù)接收到。
? ? ? ? ? ? ? ? ? 3.返回的promise對象只有當函數(shù)體內(nèi)的全部異步操作完成后才能改變狀態(tài)。
? ? ? ? ? ? ? ? ? 4.任何一個await后面的promise狀態(tài)變?yōu)閞eject,后序都不會執(zhí)行,并拋出錯誤,可以用try...catch塊包裹,使后面的語句照常執(zhí)行
? ? ? ? ? ? ? ? ? 5.沒有前后關系的兩個異步操作,讓其同步觸發(fā)? ?

? ? ? ? ? ? ? ? ? ? 6.async函數(shù)保留運行棧