es6相關(guān)新特性


1.let命令

a. 塊級(jí)聲明命令,只在當(dāng)前代碼塊有效
b. 不存在變量提升,只有在聲明后才可調(diào)用
c. 暫時(shí)性死區(qū),變量在沒有聲明完成前調(diào)用
d. 不允許重復(fù)聲明相同的變量

// IIFE 寫法
(function () {
  var tmp = ...;
  ...
}());

// 塊級(jí)作用域?qū)懛?{
  let tmp = ...;
  ...
}
  1. const命令
    大部分同1,指向一個(gè)固定的內(nèi)存地址,值是可變的,如果想保存數(shù)據(jù)的一致性,使用Object.freeze()將對(duì)象凍結(jié)。

  2. import命令

  3. class命令
    ES5 的繼承,實(shí)質(zhì)是先創(chuàng)造子類的實(shí)例對(duì)象this,然后再將父類的方法添加到this上面(Parent.apply(this))。ES6 的繼承機(jī)制完全不同,實(shí)質(zhì)是先將父類實(shí)例對(duì)象的屬性和方法,加到this上面(所以必須先調(diào)用super方法),然后再用子類的構(gòu)造函數(shù)修改this。

  4. 變量的解構(gòu)賦值 含有Iterator 接口的數(shù)據(jù)結(jié)構(gòu)皆可
    數(shù)組的元素是按次序排列的,變量的取值由它的位置決定;而對(duì)象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。

  5. 模板字符串

let a = 'weil'
console.log(`我是${a}`) // 我是weil
  1. 標(biāo)簽?zāi)0?/li>
alert`hello` // 等同于 alert('hello')
  1. 新增字符串方法
    includes() 判斷字符串中是否包含 某個(gè)字符 返回 boolean
    startsWith() 判斷字符串開頭是否為 某個(gè)字符 返回boolean
    endsWith() 判斷字符串是否以某個(gè)字符結(jié)尾 返回boolean

  2. 字符串長(zhǎng)度補(bǔ)全功能 es7
    padStart(str, length) str填入的字符串,length字符串長(zhǎng)度不足單位(前面補(bǔ)足)
    padEnd(str, length) str填入的字符串,length字符串長(zhǎng)度不足單位 (結(jié)尾補(bǔ)足)

  3. 消除空格
    trimStart() 消除字符串開頭空格
    trimEnd() 消除字符串結(jié)尾空格

  4. 正則表達(dá)式
    先行斷言 /\x(?=y)/.exec(str)
    后行斷言 /\x(?!y)/.exec(str)

  5. 二進(jìn)制和八進(jìn)制
    二進(jìn)制:0b(0B)
    八進(jìn)制:0o(0O)

  6. 數(shù)值判斷
    Number.isFinite() 數(shù)值是否有限
    Number.isNaN() 參數(shù)類型不是NaN,Number.isNaN一律返回false
    Number.isInterger() 判斷數(shù)值是否為整數(shù)

  7. 允許為函數(shù)參數(shù)設(shè)置默認(rèn)值
    函數(shù)的length屬性,將返回沒有指定默認(rèn)值的參數(shù)個(gè)數(shù)。也就是說,指定了默認(rèn)值后,length屬性將失真。

rest 參數(shù)之后不能再有其他參數(shù)(即只能是最后一個(gè)參數(shù)),否則會(huì)報(bào)錯(cuò)。

箭頭函數(shù) 改變this指向

箭頭函數(shù)有幾個(gè)使用注意點(diǎn)。

(1)函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
(2)不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
(3)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用 rest 參數(shù)代替。
(4)不可以使用yield命令,因此箭頭函數(shù)不能用作 Generator 函數(shù)。

  1. 如果所有函數(shù)都是尾調(diào)用,那么完全可以做到每次執(zhí)行時(shí),調(diào)用幀只有一項(xiàng),這將大大節(jié)省內(nèi)存。這就是“尾調(diào)用優(yōu)化”的意義。

  2. 尾遞歸,同尾調(diào)用只存在一個(gè)調(diào)用幀,所以永遠(yuǎn)不會(huì)發(fā)生“棧溢出”錯(cuò)誤,相對(duì)節(jié)省內(nèi)存。

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

  4. Symbol() 將變量或者函數(shù)私有化

  5. WeakSet() 和 WeakMap() 使用場(chǎng)景 儲(chǔ)存 DOM 節(jié)點(diǎn),而不用擔(dān)心這些節(jié)點(diǎn)從文檔移除時(shí),會(huì)引發(fā)內(nèi)存泄漏

let、const、class聲明的全局變量不與頂層屬性掛鉤(globalThis)


備注:總結(jié)自https://es6.ruanyifeng.com/#docs/let

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。