ES5吉殃、ES6及志、ES7

ES5

? ? ? ? ?1、嚴(yán)格模式

? ? ? ? ? ? ? *理解

? ? ? ? ? ? ? ? ? 1寨腔、除了正常運(yùn)行的模式(混雜模式)速侈,es5添加了第二種運(yùn)行模式:‘嚴(yán)格模式’

? ? ? ? ? ? ? ? ? ?2、顧名思義迫卢,這種模式使得javascript在更加嚴(yán)格的條件下運(yùn)行

? ? ? ? ? ? ?*目的

? ? ? ? ? ? ? ? ?1倚搬、消除javascript語(yǔ)法的一些不合理,不嚴(yán)謹(jǐn)之處乾蛤。

? ? ? ? ? ? ? ? ?2每界、消除代碼的一些不安全之處,為代碼的安全運(yùn)行保駕護(hù)航

? ? ? ? ? ? ? *使用:在script標(biāo)簽的開始添加‘use strict’

? ? ? ? ? ? ? *與普通模式的差別

? ? ? ? ? ? ? ? ? ?1家卖、必須使用var定義變量

? ? ? ? ? ? ? ? ? ?2眨层、禁止自定義的函數(shù)中this指向window

? ? ? ? ? ? ? ? ? ?3、創(chuàng)建eval作用域上荡,在一般模式中eval()函數(shù)執(zhí)行的代碼相當(dāng)于放到全局作用域中趴樱,eval沒(méi)有自己的作用,當(dāng)添加嚴(yán)格模式后酪捡,eval有了自己的作用域叁征,這樣就防止的污染全局作用域

? ? ? ? ? ? ?2、JSON

? ? ? ? ? ? ? ? ? ? ?1逛薇、JSON主要用于前端和服務(wù)器發(fā)送信息捺疼,他本質(zhì)是一個(gè)特殊的字符串,因?yàn)樗械恼Z(yǔ)言都可以識(shí)別字符串永罚。

? ? ? ? ? ? ? ? ? ? ? 2啤呼、JSON和js對(duì)象的格式一樣,不過(guò)JSON中的字符串屬性名必須加雙引號(hào)

? ? ? ? ? ? ? ? ? ? ? 3呢袱、JSON分類:?

? ? ? ? ? ? ? ? ? ? ? ? ?對(duì)象{}, 比如: '{"name":"wang","age":"18"}'

? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)組[],比如: ‘[1,2,3官扣,“hello”,ture] ’

? ? ? ? ? ? ? ? ? ? ?4、JSON(對(duì)象/數(shù)組)中的值

? ? ? ? ? ? ? ? ? ? ? ? ?字符串产捞,數(shù)值醇锚,bool,對(duì)象,數(shù)組

? ? ? ? ? ? ? ? ? ? 5焊唬、JSON.stringfy(obj/arr)將js對(duì)象轉(zhuǎn)換為JSON對(duì)象

? ? ? ? ? ? ? ? ? ? 6恋昼、JSON.parse(json)將json對(duì)象轉(zhuǎn)換為js對(duì)象

? ? ? ? ? ? ? 3、ES5給Object擴(kuò)展的方法

? ? ? ? ? ? ? ? ? ? ? 1赶促、Object.create(prototype,{descriptors})

? ? ? ? ? ? ? ? ? ? ? ?*作用:以指定對(duì)象為原型創(chuàng)建新的對(duì)象液肌。

? ? ? ? ? ? ? ? ? ? ? ?*為新的對(duì)象指定新的屬性,并且對(duì)屬性進(jìn)行描述

? ? ? ? ? ? ? ? ? ? ? ? ? -value:屬性的值

? ? ? ? ? ? ? ? ? ? ? ? ? -writeable:?標(biāo)識(shí)sex屬性是否可以修改?默認(rèn)false(不可修改)

? ? ? ? ? ? ? ? ? ? ? ? ? -configurable:?標(biāo)識(shí)當(dāng)前實(shí)行是否可以被刪除?默認(rèn)false(不可刪除)

? ? ? ? ? ? ? ? ? ? ? ? ? -enumerable:標(biāo)識(shí)當(dāng)前屬性是否可以用for?in?遍歷


? ? ? ? ? ? ? ? ? ? ?2鸥滨、Object.defineProperties(object,descriptors)

? ? ? ? ? ? ? ? ? ? ? ? ?*作用:為指定的對(duì)象添加屬性嗦哆,可以同時(shí)修改或添加多個(gè)屬性

? ? ? ? ? ? ? ? ? ? ? ? ?*get: 用來(lái)獲取當(dāng)前屬性值得回調(diào)函數(shù),查看添加的屬性值是自動(dòng)調(diào)用

? ? ? ? ? ? ? ? ? ? ? ? ?*set:修改當(dāng)前屬性值觸發(fā)的回調(diào)函數(shù)婿滓,并且實(shí)參為修改之后的值

? ? ? ? ? ? ? ? ? ? ? ? ?*Object.defineProperties也可以用Object.create()類似的方法添加屬性的描述


? ? ? ? ? ? ? ? ? ? ? 3老速、對(duì)象本身的兩個(gè)方法(用法和definrProperties中的類似)

? ? ? ? ? ? ? ? ? ? ? ? ? *get propertyName(){}用來(lái)得到當(dāng)前屬性值的回調(diào)函數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? *set propertyName(){}用來(lái)監(jiān)視當(dāng)前屬性值變化的回調(diào)函數(shù)


? ? ? ? ? ? ? 4、ES5給數(shù)組擴(kuò)展的方法

? ? ? ? ? ? ? ? ? ? ?1凸主、Array.prototype.indexOf(value) :得到值在數(shù)組中的第一個(gè)下標(biāo)

? ? ? ? ? ? ? ? ? ? ?2橘券、Array.prototype.lastIndexOf(value) :?得到值在數(shù)組中的最后一個(gè)第一個(gè)下標(biāo)

? ? ? ? ? ? ? ? ? ? ?3、Array.prototype.forEach(function(item,index){}): 遍歷數(shù)組

? ? ? ? ? ? ? ? ? ? ?4卿吐、Array.prototype.map(function(item,index){}): 返回函數(shù)處理后的數(shù)組

? ? ? ? ? ? ? ? ? ? ?5旁舰、Array.prototype.filter(function(item,index){}):遍歷數(shù)組過(guò)濾出一個(gè)新的子數(shù)組,返回條件為true的值

? ? ? ? ? ? ? 5嗡官、ES5給函數(shù)擴(kuò)展的方法

? ? ? ? ? ? ? ? ? ? 1箭窜、call(obj,params),apply(obj,[params])衍腥,bind()修改函數(shù)中this的指向

? ? ? ? ? ? ? ? ? ?call()和apply()區(qū)別:call()和apply()的卻別主要是傳遞函數(shù)參數(shù)是的區(qū)別磺樱,call()的參數(shù)是在傳入的對(duì)象之后,參數(shù)依次傳入紧阔,而apply()傳入?yún)?shù)是放到一個(gè)數(shù)組中的坊罢。

? ? ? ? ? ? ? ? ? ?bind()和call()以及apply()的區(qū)別:bind()執(zhí)行后返回復(fù)制的函數(shù),不會(huì)自動(dòng)執(zhí)行需要調(diào)用或者使用回調(diào)函數(shù)調(diào)用擅耽,而apply()和call()可以自動(dòng)調(diào)用,bind()傳入?yún)?shù)和call()相同

ES6

? ? ? ? ? 1物遇、let關(guān)鍵字:

? ? ? ? ? ? ? ? *作用:

? ? ? ? ? ? ? ? ? ?-和var類似定義一個(gè)變量

? ? ? ? ? ? ? ? ?*特點(diǎn)

? ? ? ? ? ? ? ? ? -在塊作用域內(nèi)有效

? ? ? ? ? ? ? ? ? -不能重復(fù)聲明

? ? ? ? ? ? ? ? ? -不會(huì)預(yù)處理乖仇,不存在提升

? ? ? ? ? ? ? ?*應(yīng)用

? ? ? ? ? ? ? ? ? -循環(huán)遍歷加監(jiān)聽,因?yàn)閘et的塊作用域

? ? ? ? ? 2询兴、const關(guān)鍵字

? ? ? ? ? ? ? ? *作用:定義一個(gè)常量

? ? ? ? ? ? ? ? *特點(diǎn):值不能修改乃沙,其他特點(diǎn)和let相同

? ? ? ? ? ? ? ? ?*應(yīng)用:定義一個(gè)常量

? ? ? ? ? ? ?3、解構(gòu)賦值

? ? ? ? ? ? ? ? ?*理解:從對(duì)象或者數(shù)組中提取數(shù)據(jù)诗舰,并賦值給變量(多個(gè))

? ? ? ? ? ? ? ? ?*對(duì)象的解構(gòu)賦值:let {a警儒,b} = {a:'123', b:'456'},變量名必須和對(duì)象中的鍵相同

? ? ? ? ? ? ? ? ?*數(shù)組的解構(gòu)賦值:let [a,b] = [1,2,3,'abc',true],位置是相互對(duì)應(yīng),如果想要獲取數(shù)組中間的元素let [,蜀铲,a边琉,b] = [1,2,3,'abc',true],輸出3记劝,‘a(chǎn)bc’,因?yàn)閮蓚€(gè)逗號(hào)占用兩個(gè)位置

? ? ? ? ? ? ?4变姨、模板字符串:簡(jiǎn)化字符串的拼接? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ?*模板字符串必須使用``包含

? ? ? ? ? ? ? ? ? ? ?*替換的部分可以用${xxx}來(lái)替換

? ? ? ? ? ? ?5、對(duì)象的簡(jiǎn)寫

? ? ? ? ? ? ? ? ? ? *省略同名的屬性值

? ? ? ? ? ? ? ? ? ? *省略方法的function

? ? ? ? ? ? ? ? ? ? *例如

? ? ? ? ? ? ?6厌丑、箭頭函數(shù)

? ? ? ? ? ? ? ? ? ? ? 1定欧、當(dāng)函數(shù)沒(méi)有形參時(shí)? let fun1 = ()=>{}

? ? ? ? ? ? ? ? ? ? ? 2、只有一個(gè)形參時(shí)()可以省略怒竿, let fun1 = a =>{console.log(a)}

? ? ? ? ? ? ? ? ? ? ? 3砍鸠、當(dāng)有多個(gè)形參時(shí)()不可以省略:let fun1 = (a,b) =>{console.log(a)}

? ? ? ? ? ? ? ? ? ? ? 4、函數(shù)體只有一條語(yǔ)句時(shí)或者是表達(dá)式的時(shí)候{}可以省略-->會(huì)制動(dòng)返回語(yǔ)句執(zhí)行的結(jié)果或者表達(dá)式運(yùn)算的結(jié)果 let fun1 = (x,y) => x+y? 相當(dāng)于let fun1 = (x,y) =>{return? x+y}

? ? ? ? ? ? ? ? ? ? ? 5耕驰、函數(shù)體有多條語(yǔ)句時(shí)正常使用一樣

? ? ? ? ? ? ? ? ? ? ? 6爷辱、箭頭函數(shù)特點(diǎn)

? ? ? ? ? ? ? ? ? ? ? ? ? *簡(jiǎn)潔

? ? ? ? ? ? ? ? ? ? ? ? ? *箭頭函數(shù)沒(méi)有自己的this,箭頭函數(shù)的this不是調(diào)用的使用決定的耍属,而是在定? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 義的時(shí)候處在的對(duì)象就是他的this

? ? ? ? ? ? ? ? ? ? ? ? ? ? *擴(kuò)展理解: 箭頭函數(shù)的this看外層是否有函數(shù)托嚣,

? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果有,外層函數(shù)的this就是內(nèi)部箭頭函數(shù)的this

? ? ? ? ? ? ? ? ? ? ? ? ? ?如果沒(méi)有厚骗,則this表示window

? ? ? ? ? ? 7示启、三點(diǎn)運(yùn)算符

? ? ? ? ? ? ? ? ?1、用途:

? ? ? ? ? ? ? ? ? ? ? 1领舰、可以用來(lái)取代arguments但是比arguments更加靈活夫嗓,因?yàn)閍rguments是一個(gè)偽數(shù)組沒(méi)有數(shù)組的一些方法比如forEach等而...可以是真正的數(shù)組可以使用數(shù)組的一些方法,但是他只能獲取形參最后部分的參數(shù)冲秽。

? ? ? ? ? ? ? ? ? ? ? ?2舍咖、

? ? ? ? ? ? ? ? ? ? ? ? ? var b = [2,3,4,5]

? ? ? ? ? ? ? ? ? ? ? ? ? arr = [1, ...b, 6]? // [1,2,3,4,5,6]

? ? ? ? ? ? ? ? ? ? ? ? ? console.log(...b)? //2 3 4 5 6

? ? ? ? ? ? ? ?8、形參默認(rèn)默認(rèn)值

? ? ? ? ? ? ? ? ? ? ? ? ? *形參默認(rèn)值---當(dāng)不傳遞參數(shù)是使用形參的默認(rèn)值作為參數(shù)

? ? ? ? ? ? ? ?9锉桑、Promise

? ? ? ? ? ? ? ? ? ? ? ? ?1排霉、promise對(duì)象:代表了未來(lái)某個(gè)時(shí)間將要發(fā)生的事件(通常是一個(gè)異步操作),有了promise對(duì)象民轴,可以將異步操作以同步的流程表達(dá)出來(lái)攻柠,避免了層層嵌套的地獄回調(diào)問(wèn)題,ES6的Promise是一個(gè)構(gòu)造函數(shù)后裸,用來(lái)生成promise實(shí)例


? ? ? ? ? ? 10瑰钮、Symbol

? ? ? ? ? ? ? ? ? ? 1、概念:ES6中的添加了一宗原始數(shù)據(jù)類型symbol(已有的原始數(shù)據(jù)類型:String,Number,boolean,null,undefined,對(duì)象)

? ? ? ? ? ? ? ? ? ? 2微驶、特點(diǎn):

? ? ? ? ? ? ? ? ? ? ? ?*Symbol屬性對(duì)應(yīng)的值是唯一的相當(dāng)于調(diào)用Symbol函數(shù)浪谴,返回一個(gè)唯一的值類似于id,解決了命名沖突

? ? ? ? ? ? ? ? ? ? ? ?*Symbol值不能與其他數(shù)據(jù)進(jìn)行計(jì)算,包括通字符串拼接

? ? ? ? ? ? ? ? ? ? ? ?*for in苟耻,for of遍歷時(shí)不會(huì)遍歷symbol屬性

? ? ? ? ? ? ? ? ? ? 3篇恒、使用

? ? ? ? ? ? ? ? ? ? ? ? ?*使用Symbol來(lái)作為對(duì)象的屬性名(因?yàn)閷傩悦辉试S相同的值)

? ? ? ? ? ? ? ? ? ? ? ? ? ? let symbol =Symbol()

? ? ? ? ? ? ? ? ? ? ? ? ? ? let obj = {}

? ? ? ? ? ? ? ? ? ? ? ? ? ? obj[symbol] = 'hello'

? ? ? ? ?11、iterator

? ? ? ? ? ? ? ? ? 1梁呈、概念:iterator是一種接口機(jī)制婚度,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供一種統(tǒng)一的訪問(wèn)機(jī)制

? ? ? ? ? ? ? ? ? ?2、作用:

? ? ? ? ? ? ? ? ? ? ? ? ?-為各種數(shù)據(jù)結(jié)構(gòu)官卡,提供一個(gè)統(tǒng)一的蝗茁、簡(jiǎn)便的訪問(wèn)接口

? ? ? ? ? ? ? ? ? ? ? ? ?-使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按照某種次序排列

? ? ? ? ? ? ? ? ? ? ? ? ?-ES6創(chuàng)造了一種新的遍歷命令for...of循環(huán),但是只用部署了iterator接口的數(shù)據(jù)結(jié)構(gòu)才可使使用for...of循環(huán)寻咒。for...of非常適合用來(lái)遍歷數(shù)組哮翘,與原來(lái)的遍歷數(shù)組的方法相比f(wàn)or...of好處更多。forEach不能使用 break 語(yǔ)句來(lái)跳出循環(huán)毛秘,也不能使用 return 語(yǔ)句來(lái)從閉包函數(shù)中返回饭寺。for...in會(huì)遍歷原型上的屬性

? ? ? ? ? ? ? ? ? ? ?3、工作原理:

? ? ? ? ? ? ? ? ? ? ? ? ? -創(chuàng)建一個(gè)指針對(duì)象(遍歷器對(duì)象)叫挟,指向數(shù)據(jù)結(jié)構(gòu)的起始位置

? ? ? ? ? ? ? ? ? ? ? ? ? -第一次調(diào)用next方法艰匙,指針自動(dòng)指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員

? ? ? ? ? ? ? ? ? ? ? ? ? -接下來(lái)不斷的調(diào)用next方法,指針會(huì)一直往后移動(dòng)抹恳,直到最后一個(gè)成員

? ? ? ? ? ? ? ? ? ? ? ? ? ?-每一次調(diào)用next返回一個(gè)包含value和done的對(duì)下對(duì)象员凝,{value:當(dāng)前成員的值,done:布爾值}奋献,done對(duì)應(yīng)的布爾值表示當(dāng)前的數(shù)據(jù)結(jié)構(gòu)是否遍歷結(jié)束健霹,當(dāng)遍歷結(jié)束時(shí),返回{value: undefined , done :true}

? ? ? ? ? ? ? ? ? ? ? 4瓶蚂、擴(kuò)展理解

? ? ? ? ? ? ? ? ? ? ? ? ? -當(dāng)數(shù)據(jù)結(jié)構(gòu)上部署了Symbol.iterator接口糖埋,改數(shù)據(jù)就是可以用for of遍歷

? ? ? ? ? ? ? ? ? ? ? ? ? -可以使用for of遍歷的數(shù)據(jù)結(jié)構(gòu):Array, arguments, set容器, map容器窃这,String瞳别,不可以遍歷對(duì)象,如果想要遍歷對(duì)象那么需要給對(duì)象遍歷iterator

自定義的iterator接口
給對(duì)象部署iterator

? ? ? ? ?12杭攻、Generator函數(shù)

? ? ? ? ? ? ? ? ?1洒试、概念:

? ? ? ? ? ? ? ? ? ? ?-ES6提供的解決異步編程的方法之一

? ? ? ? ? ? ? ? ? ? ?-Generator函數(shù)是一個(gè)狀態(tài)機(jī),內(nèi)部封裝了把不同狀態(tài)的數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ?-用來(lái)生成遍歷器對(duì)象

? ? ? ? ? ? ? ? ? ? -可以暫停函數(shù)朴上,yoeld可以暫停,next再次啟動(dòng)卒煞,每次返回的是yeild的表達(dá)式結(jié)果

? ? ? ? ? ? ? ? ?2痪宰、特點(diǎn):

? ? ? ? ? ? ? ? ? ? -function 與函數(shù)名之間有一個(gè)*

? ? ? ? ? ? ? ? ? ? -內(nèi)部用yeild表達(dá)式來(lái)定義不同的狀態(tài)

? ? ? ? ? ? ? ?3、generator函數(shù)返回一個(gè)指針對(duì)象,而不會(huì)執(zhí)行函數(shù)內(nèi)部邏輯

? ? ? ? ? ? ? ?4衣撬、調(diào)用next方法函數(shù)內(nèi)部的邏輯才開始執(zhí)行調(diào)用next返回一個(gè)對(duì)象和interator的next返回的結(jié)果相同乖订,但是遇到y(tǒng)eild表達(dá)式停止。

? ? ? ? ? ? ? ?5具练、再次調(diào)用next方法會(huì)重上一次停止額yeild開始運(yùn)行

? ? ? ? ? ? ? ?6乍构、yeild語(yǔ)句執(zhí)行返回的結(jié)果是undefined,當(dāng)調(diào)用next方法時(shí)傳入?yún)?shù)扛点,參數(shù)的內(nèi)容將會(huì)是啟動(dòng)yeild語(yǔ)句的返回值

Generator處理異步任務(wù)

? ? ? ? ? ?13哥遮、async函數(shù)

? ? ? ? ? ? ? ? ? 1、概念:真正意義上的解決異步回調(diào)問(wèn)題陵究,同步流程表達(dá)異步操作

? ? ? ? ? ? ? ? ? 2眠饮、語(yǔ)法 async function foo(){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?await 異步操作

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? await 異步操作}

? ? ? ? ? ? ? ? ? ?3、特點(diǎn):

? ? ? ? ? ? ? ? ? ?-不需要Generator去調(diào)用next方法铜邮,遇到await等待仪召,當(dāng)前的異步操作完成就往下執(zhí)行

? ? ? ? ? ? ? ? ? ?-返回的總是promise對(duì)象,可以用then方法進(jìn)行下一步操作

? ? ? ? ? ? ? ? ? ?-使用await代替了Generator中的yeild

? ? ? ? ? ? ? ? ? ?-語(yǔ)義明確松蒜,使用簡(jiǎn)單


await返回值


async應(yīng)用

? ? ? ? ? ? ? ? ?14扔茅、Class

? ? ? ? ? ? ? ? ? ? ? ? ? ? 1、es6中通過(guò)class來(lái)創(chuàng)建一個(gè)構(gòu)造函數(shù)秸苗,并且可以通過(guò)extend實(shí)現(xiàn)繼承

? ? ? ? ? ? ?15召娜、字符串?dāng)U展,數(shù)值擴(kuò)展难述,數(shù)組擴(kuò)展?

? ? ? ? ? ? ? ? ? ? ? 1萤晴、字符串

? ? ? ? ? ? ? ? ? ? ? ? ? -includes(str):判斷是否包含指定的字符串

? ? ? ? ? ? ? ? ? ? ? ? ? -startWith(str) : 判斷是否以指定的字符串開始

? ? ? ? ? ? ? ? ? ? ? ? ? -endWith(str): 判斷是否以指定的字符串結(jié)束

? ? ? ? ? ? ? ? ? ? ? ? ? -repeat(count): 將原來(lái)的字符串重復(fù)指定的次數(shù)

? ? ? ? ? ? ? ? ? ? ? 2、數(shù)值

? ? ? ? ? ? ? ? ? ? ? ? ?-二進(jìn)制用0b表示胁后,八進(jìn)制用0o表示

? ? ? ? ? ? ? ? ? ? ? ? ?-Number.isNan(i):判斷是否為Nan

? ? ? ? ? ? ? ? ? ? ? ? ?-Number.isInteger(i):判斷是否為正數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ?-Number.trunc(i) : 去除小數(shù)部分

? ? ? ? ? ? ? ? ? ? ?3店读、數(shù)組

? ? ? ? ? ? ? ? ?-Array.from(): 將偽數(shù)組對(duì)象或者可遍歷對(duì)象轉(zhuǎn)換為真數(shù)組? Array.from(btns).forEach

? ? ? ? ? ? ? ? ?arr = Array.prototype.slice.call(偽數(shù)組)? 將偽數(shù)組轉(zhuǎn)換成真實(shí)的數(shù)組

? ? ? ? ? ? ? ? -Array.of() (v1,v2,v3) :將一系列的值轉(zhuǎn)換為數(shù)組

? ? ? ? ? ? ? ? -arr.find(function(value,index){return true}) :找到第一個(gè)滿足條件為true的元素

? ? ? ? ? ? ? ? -arr.findIndex(function(value,index) {return true})? :返回第一個(gè)滿足條件的元素的下表


? ? ? ? ? ? ? ? 4攀芯、對(duì)象?

? ? ? ? ? ? ? ? ? ?-Object.assign(target,source1,source2..) : 將原對(duì)象的屬性賦值到目標(biāo)對(duì)象上

? ? ? ? ? ? ? ? ? ?-直接操作__proto__屬性屯断,es6之前沒(méi)有,只能操作prototype屬性

16侣诺、深克隆和淺克隆

? ? ? ? ? ? ? ?1殖演、拷貝數(shù)據(jù):

? ? ? ? ? ? ? ? ? -基本數(shù)據(jù)類型:拷貝后會(huì)生成一份新的數(shù)據(jù),修改拷貝之后的數(shù)據(jù)不會(huì)影響原來(lái)的數(shù)據(jù)類似于深拷貝

? ? ? ? ? ? ? ? ? -對(duì)象數(shù)組:拷貝后不會(huì)生成新的數(shù)據(jù)年鸳,而是拷貝引用趴久,修改拷貝以后的數(shù)據(jù)會(huì)影響原來(lái)的數(shù)據(jù)類似于淺拷貝

? ? ? ? ? ? ? ?2、拷貝數(shù)據(jù)的方法:

? ? ? ? ? ? ? ? ? ?1搔确、直接復(fù)制給另一個(gè)數(shù)據(jù)? ?//淺拷貝

? ? ? ? ? ? ? ? ? ?2彼棍、Object.assgin()? // 淺拷貝

? ? ? ? ? ? ? ? ? ? 3灭忠、Array.prototype.concat()? //? ? 淺拷貝

? ? ? ? ? ? ? ? ? ? 4、Array.prototype.slice()? // 淺拷貝

? ? ? ? ? ? ? ? ? ? 5座硕、JSON.parse(JSON.stringfy())? //深拷貝

? ? ? ? ? ? ? ?3弛作、淺拷貝:特點(diǎn)拷貝的引用,修改拷貝的值元數(shù)據(jù)也會(huì)受到影響华匾,使得原數(shù)據(jù)不安全

? ? ? ? ? ? ? ?4映琳、深拷貝:拷貝的時(shí)候生成新的數(shù)據(jù),修改拷貝之后的值元數(shù)據(jù)不受影響

? ? ? ? ? ? ? ?5蜘拉、實(shí)現(xiàn)深拷貝:

? ? ? ? ? ? ? ? ? 思想:不斷遍歷數(shù)組/對(duì)象將每一項(xiàng)萨西,直到拿到基本的數(shù)據(jù)類型,然后去復(fù)制

? ? ? ? ? ? ? ? ? 實(shí)現(xiàn):

? ? ? ? ? ? ? ? ? ? ? ? -首先要知道數(shù)據(jù)類型诸尽,因?yàn)閠ypeof返回的數(shù)據(jù)類型:String原杂,Number,Boolean,Undefined,Object,Function您机,不能準(zhǔn)確的判斷是Array或者Object

? ? ? ? ? ? ? ? ? ? ? ? -準(zhǔn)確檢測(cè)數(shù)據(jù)類型的方法: Object.prototype.toString.call(obj)

? ? ? ? ? ? ? ? ? ? ? ?或者可以使用jQuery中的jQuery.type(測(cè)試的值)來(lái)實(shí)現(xiàn)數(shù)據(jù)類型的準(zhǔn)確判斷

? ? ? ? ? ? ? ? ? ? ? 還可以用?console.log([].constructor.name?) // Array


準(zhǔn)確檢測(cè)數(shù)據(jù)類型


實(shí)現(xiàn)深克隆

? ? ? ?實(shí)現(xiàn)深拷貝方法二:通過(guò)JSON.parse()和JSON.stringify()

?

?? ? ? ? ? ? ?17穿肄、Set容器和Map容器

? ? ? ? ? ? ? ? ? ? ? ?1、Set容器:無(wú)序不可重復(fù)的多個(gè)value的集合體

? ? ? ? ? ? ? ? ? ? ? ? *Set()

? ? ? ? ? ? ? ? ? ? ? ? *Set(array)? //初始化Set容器時(shí)际看,里面的是數(shù)組

? ? ? ? ? ? ? ? ? ? ? ? *add(value)? //添加

? ? ? ? ? ? ? ? ? ? ? ? *delete(value)

? ? ? ? ? ? ? ? ? ? ? ? *has(value)

? ? ? ? ? ? ? ? ? ? ? ? *clear()

? ? ? ? ? ? ? ? ? ? ? ? ? ?*size

? ? ? ? ? ? ? ? ? ? ? ?2咸产、Map容器:無(wú)序的key不重復(fù)的多個(gè)key-value集合體

? ? ? ? ? ? ? ? ? ? ? ? ?*Map()

? ? ? ? ? ? ? ? ? ? ? ? ?*Map(array)

? ? ? ? ? ? ? ? ? ? ? ? ?*set(key,value)

? ? ? ? ? ? ? ? ? ? ? ? ?*get(key)

? ? ? ? ? ? ? ? ? ? ? ? ?*delete(key)

? ? ? ? ? ? ? ? ? ? ? ? ?*has(key)

? ? ? ? ? ? ? ? ? ? ? ? ?*clear()

? ? ? ? ? ? ? ? ? ? ? ? ?*size



利用set去重

ES7

指數(shù)運(yùn)算符:**

Array.prototype.includes(value) : 判斷數(shù)組中是否包含指定的value

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仲闽,隨后出現(xiàn)的幾起案子脑溢,更是在濱河造成了極大的恐慌,老刑警劉巖赖欣,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屑彻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡顶吮,警方通過(guò)查閱死者的電腦和手機(jī)社牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悴了,“玉大人搏恤,你說(shuō)我怎么就攤上這事∨冉唬” “怎么了熟空?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搞莺。 經(jīng)常有香客問(wèn)我息罗,道長(zhǎng),這世上最難降的妖魔是什么才沧? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任阱当,我火速辦了婚禮俏扩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弊添。我一直安慰自己,他們只是感情好捌木,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布油坝。 她就那樣靜靜地躺著,像睡著了一般刨裆。 火紅的嫁衣襯著肌膚如雪澈圈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天帆啃,我揣著相機(jī)與錄音瞬女,去河邊找鬼。 笑死努潘,一個(gè)胖子當(dāng)著我的面吹牛诽偷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疯坤,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼报慕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了压怠?” 一聲冷哼從身側(cè)響起眠冈,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菌瘫,沒(méi)想到半個(gè)月后蜗顽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雨让,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年雇盖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宫患。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刊懈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娃闲,到底是詐尸還是另有隱情虚汛,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布皇帮,位于F島的核電站卷哩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏属拾。R本人自食惡果不足惜将谊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一冷溶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尊浓,春花似錦逞频、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瓦堵,卻和暖如春基协,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菇用。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工澜驮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惋鸥。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓杂穷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揩慕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亭畜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360