拓展2(ES6)

一、ES5與ES6對比

var let const

1、ES5 聲明局部變量必須使用一個立即執(zhí)行函數,而ES6 使用{}+let;

2、使用var會變量提升,而使用let不會,但是let有一個臨時死區(qū),就是在還未聲明時調用會報錯;

3、let 的作用域在最近的 {} 之間;

4、const聲明局部常量,只有一次賦值的機會,必須在聲明的時候賦值;


let 讓每次循環(huán)都聲明了一個局部變量,不會變量提升,若用var,那么將導致打印的始終為一個數值。


局部作用函數中的j是i的第一個參數 var j = arguments[0]


let的作用域只在()內,但是for循環(huán)會自動在每次循環(huán)的時候添加i;其中一共聲明了七個i,每個變量一個值;

二、ES6新增的數據類型

ES6在原基礎七種數據類型(number、string、boolean、symbol、undefined、null、object),在object上細分了幾種數據類型。


symbol

靜態(tài)屬性和靜態(tài)方法:靜態(tài)屬性是可以直接通過構造函數調用的屬性,靜態(tài)方法是調用函數。


Symbol ()可以隱藏屬性

總結:

1.Symbol()不能加new;

2.每一個Symbol()都是唯一;

3.創(chuàng)造私有屬性,要再塊級作用域以object[Symbol()] = ''保存;


object > set (Set是對象,可以儲存任何類型的唯一值)

作用:

1.數組去重



(1)是對象;(2)存儲的是唯一值;(3)對所有原始值進行去重;(4)對所有對象的引用可以去重;

ES6之前的數組去重:


缺點:1.用對象的下標去重只支持字符串,無法區(qū)分數字和字符串;2.無法識別對象;

ES6數組去重:


不適用array.from是返回Set對象

Set的方法:

new Set().add()??new Set().has()??new Set().delete()??


object? > map

new Map() 是彌補了只能將字符串作為key的缺點,new Map()可以將對象作為key;


object? > weakSet

對對象弱引用,如果一個對象被垃圾回收,則null;沒有辦法列出所有的值;


三、ES6新增的API

Object.assign


數字的拷貝是直接賦值,對象的拷貝是拷貝內存。

深拷貝就是倆個對象沒有任何交集,完美深拷貝是不可能的,因此Object.assign也是淺拷貝;

淺拷貝就是“=”,賦值,直接拷貝,不管其實際內存里有什么;

深拷貝就是完全拷貝,包括其地址,內存內的;


答案是c,因為引用的是地址,一個變量只能存一個地址;

Object.assign是拷貝可枚舉的屬性,不可枚舉的屬性有toString(),__proto__。


Array.from

變數組,可將偽數組變數組;

ES 5? 寫法:a = Array.prototype.slice.call(a,0)?

ES6? 寫法:

let s = new Set(['foo',window])

Array.from(s)? ?// ["foo",window]

創(chuàng)建一個長度為5的空數組:

ES5:

Array.apply(null,{length:5})

ES6:

Array.from({length:5})? //創(chuàng)建一個長度為n的數組


Array.prototype.fill()

填充



Array.prototype.find()



Array.prototype.filter()



Array.prototype.findIndex



Array.prototype.copyWithin

Array.prototype.entries

Array.prototype.keys

Array.prototype.values


判斷一個字符串是否包含在其中的四種方法:

string.indexOf()

String.prototype.includes //?

string.search也可以,同時可以兼并正則;

string.match()


String.prototype.repeat

String.prototype.startsWith //以XX開頭? 可用xx.indexOf('x') === 0代替

String.prototype.endsWith //以XX結尾? 可用xx.indexOf('x') === xx.length-1代替


Number.EPSILON // 看JS的最小誤差

Number.isInteger //判斷是否為整數

Number.isSafeInteger?

Number.isFinite

Number.isNAN


parseInt的BUG



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • let 和 const 命令 let 命令 塊級作用域 const 命令 頂層對象的屬性 gl...
    安小明閱讀 1,039評論 0 0
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice閱讀 1,694評論 0 2
  • 1、新的聲明方式 以前我們在聲明時只有一種方法,就是使用var來進行聲明,ES6對聲明的進行了擴展,現在可以有三種...
    令武閱讀 1,088評論 0 7
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    卞卞村長L閱讀 680評論 0 0
  • 推酷誠意滿滿的技術周刊《編程狂人》, 下面是內容列表,干貨多多,也可以移步到官網進一步閱讀。 業(yè)界新聞 專家觀點:...
    推酷閱讀 566評論 1 3

友情鏈接更多精彩內容