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
? ? ? ? ?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ǔ)句的返回值
? ? ? ? ? ?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)單
? ? ? ? ? ? ? ? ?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
? ? ? ?實(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
ES7
指數(shù)運(yùn)算符:**
Array.prototype.includes(value) : 判斷數(shù)組中是否包含指定的value