this的應(yīng)用及指向問(wèn)題
this是Javascript語(yǔ)言的一個(gè)關(guān)鍵字视译。它代表函數(shù)運(yùn)行時(shí)院水,自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用屋摔。隨著函數(shù)使用場(chǎng)合的不同烁设,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象装黑。
this的使用情況:
1副瀑、作為普通函數(shù)調(diào)用,這時(shí)函數(shù)屬于全局性調(diào)用恋谭,因此this就代表全局對(duì)象window糠睡。
2、作為對(duì)象方法的調(diào)用疚颊,這時(shí)this就指這個(gè)當(dāng)前對(duì)象狈孔。(事件處理函數(shù)同理)
3、作為構(gòu)造函數(shù)調(diào)用材义,所謂構(gòu)造函數(shù)均抽,就是通過(guò)這個(gè)函數(shù)生成一個(gè)新對(duì)象(實(shí)例)。這時(shí)其掂,this就指這個(gè)新對(duì)象(實(shí)例)油挥。
4、apply 款熬、 call 喘漏、bind的介紹(函數(shù)的方法)
apply 、 call 华烟、bind 三者都是用來(lái)改變函數(shù)的this對(duì)象的指向的;第一個(gè)參數(shù)都是this要指向的對(duì)象持灰,也就是想指定的上下文盔夜;從第二個(gè)參數(shù)開始,就是函數(shù)的本身的參數(shù)堤魁;
但bind 是返回對(duì)應(yīng)函數(shù)喂链,便于稍后調(diào)用;apply 妥泉、call 則是立即調(diào)用 椭微。
5、應(yīng)用總結(jié)
我們都知道定時(shí)器的匿名函數(shù)里不能寫this盲链,它會(huì)指向window蝇率,但有了bind方法以后,我們可以隨意設(shè)定this 的指向刽沾。
利用變量賦值改變(將正確的this存儲(chǔ)下來(lái))本慕。
JSON
JSON 是一種輕量級(jí)的數(shù)據(jù)交換格式。它是基于 ECMAScript的一個(gè)子集侧漓,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)锅尘。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫布蔗,同時(shí)也易于機(jī)器解析和生成藤违,并有效地提升網(wǎng)絡(luò)傳輸效率浪腐。
JSON字符串和對(duì)象直接的轉(zhuǎn)換
1、JSON.parse 函數(shù)
作用:將 JavaScript 對(duì)象表示法 (JSON) 字符串轉(zhuǎn)換為對(duì)象顿乒,具有json格式檢測(cè)功能议街。
2、JSON.stringify()函數(shù)
作用:將 JavaScript 值轉(zhuǎn)換為 JavaScript 對(duì)象表示法 (JSON) 字符串
3淆游、eval()函數(shù)---性能不及JSON.parse(),安全性不好傍睹。
作用:eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼犹菱。
eval()在解析代碼時(shí)還要用一對(duì)圓括號(hào)將字符串包起來(lái)拾稳。其目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式轉(zhuǎn)化為對(duì)象,而不是作為語(yǔ)句來(lái)執(zhí)行腊脱。
例如:eval("{}") 和 eval('('+'{}'+')')
eval比JSON.parse()要早访得。
let和const關(guān)鍵字( http://es6.ruanyifeng.com/ )
ES6新增了let命令,用來(lái)聲明變量陕凹。它的用法類似于var悍抑,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效杜耙。
不存在變量提升
只要塊級(jí)作用域內(nèi)存在let命令搜骡,它所聲明的變量就“綁定”這個(gè)區(qū)域,不再受外部的影響佑女。
let不允許在相同作用域內(nèi)记靡,重復(fù)聲明同一個(gè)變量。
ES6允許塊級(jí)作用域的任意嵌套团驱,外層無(wú)法讀取內(nèi)層作用域的變量摸吠,反之可以
允許在塊級(jí)作用域內(nèi)聲明函數(shù)
const聲明一個(gè)只讀的常量。一旦聲明嚎花,常量的值就不能改變寸痢。
const聲明的常量,也與let一樣不可重復(fù)聲明紊选。
const的作用域與let命令相同:只在聲明所在的塊級(jí)作用域內(nèi)有效啼止。
變量的解構(gòu)賦值
ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值兵罢,對(duì)變量進(jìn)行賦值族壳,這被稱為解構(gòu).
解構(gòu)的作用是可以快速取得數(shù)組或?qū)ο螽?dāng)中的元素或?qū)傩裕鵁o(wú)需使用arr[x]或者obj[key]等傳統(tǒng)方式進(jìn)行賦值
數(shù)組的解構(gòu)賦值
對(duì)象的解構(gòu)賦值
字符串的解構(gòu)賦值趣些。
函數(shù)參數(shù)的解構(gòu)賦值(利用數(shù)組和對(duì)象解構(gòu)傳參賦值)
擴(kuò)展運(yùn)算符
擴(kuò)展運(yùn)算符用三個(gè)點(diǎn)號(hào)表示仿荆,功能是把數(shù)組或類數(shù)組對(duì)象展開成一系列值
rest運(yùn)算符
rest運(yùn)算符也是三個(gè)點(diǎn)號(hào),不過(guò)其功能與擴(kuò)展運(yùn)算符恰好相反,把逗號(hào)隔開的值序列組合成一個(gè)數(shù)組
字符串?dāng)U展
模板字符串
模板字符串(template string)是增強(qiáng)版的字符串拢操,用反引號(hào)(`)標(biāo)識(shí)锦亦。它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串令境,或者在字符串中嵌入變量杠园。
repeat(n)方法返回一個(gè)新字符串,表示將原字符串重復(fù)n次舔庶。
includes():返回布爾值抛蚁,表示是否找到了參數(shù)字符串。
startsWith():返回布爾值惕橙,表示參數(shù)字符串是否在源字符串的頭部瞧甩。
endsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的尾部弥鹦。
=>函數(shù)
函數(shù)默認(rèn)值
箭頭函數(shù)有幾個(gè)使用注意點(diǎn)肚逸。
1、函數(shù)體內(nèi)this對(duì)象彬坏,就是定義時(shí)所在的對(duì)象朦促,而不是使用時(shí)所在的對(duì)象。This不會(huì)改變了栓始。
2务冕、不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō)幻赚,不可以使用new命令禀忆,否則會(huì)拋出一個(gè)錯(cuò)誤。
3坯屿、不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在巍扛。
4领跛、箭頭函數(shù)一定是匿名函數(shù)。
5撤奸、箭頭函數(shù)應(yīng)用總結(jié):
箭頭函數(shù)適合于無(wú)復(fù)雜邏輯或者無(wú)副作用的純函數(shù)場(chǎng)景下吠昭,例如用在map、reduce胧瓜、filter的回調(diào)函數(shù)定義中矢棚;
不要在最外層定義箭頭函數(shù),因?yàn)樵诤瘮?shù)內(nèi)部操作this會(huì)很容易污染全局作用域府喳。最起碼在箭頭函數(shù)外部包一層普通函數(shù)蒲肋,將this控制在可見的范圍內(nèi);
箭頭函數(shù)最吸引人的地方是簡(jiǎn)潔。在有多層函數(shù)嵌套的情況下兜粘,箭頭函數(shù)的簡(jiǎn)潔性并沒有很大的提升申窘,反而影響了函數(shù)的作用范圍的識(shí)別度,這種情況不建議使用箭頭函數(shù)孔轴。
Symbol類型
symbol--表示獨(dú)一無(wú)二的值剃法,它是js中的第七種數(shù)據(jù)類型。
基本數(shù)據(jù)類型:null undefined number boolean string symbol
引用數(shù)據(jù)類型:object
Symbol():首字母大寫路鹰。
symbol 函數(shù)前不能使用new,否則會(huì)報(bào)錯(cuò)贷洲,原因在于symbol是一個(gè)原始類型的值,不是對(duì)象晋柱。
1优构、symbol函數(shù)接收一個(gè)字符串作為參數(shù),表示對(duì)symbol的描述趣斤,主要是為了在控制臺(tái)顯示俩块,或者轉(zhuǎn)為字符串的時(shí)候,比較容易區(qū)分浓领。描述的內(nèi)容相同僅僅表示的是描述玉凯,不代表其他的意義。
2联贩、symbol數(shù)據(jù)類型轉(zhuǎn)換漫仆。
symbol可以利用String()、toString()轉(zhuǎn)換成字符串
利用Boolean()或者泪幌!轉(zhuǎn)換成布爾值(只有true值)
不能轉(zhuǎn)換成數(shù)字盲厌。
不能使用任何運(yùn)算符進(jìn)行運(yùn)算。
3祸泪、作為對(duì)象的屬性名吗浩。
4、注意事項(xiàng)
不能直接使用[symbol()]作為鍵值没隘,最好添加對(duì)應(yīng)的參數(shù)進(jìn)行區(qū)分懂扼,而且也不能被for...in遍歷出來(lái)。但可以通過(guò)Object.getOwnPropertySymbols(obj)方法獲取一個(gè)對(duì)象所有的symbol屬性右蒲。
Set(array)和Map(object)結(jié)構(gòu)
ES6提供了數(shù)據(jù)結(jié)構(gòu)set. 它類似于數(shù)組阀湿,但是成員的值都是唯一的,沒有重復(fù)的值瑰妄。
Set 本身是一個(gè)構(gòu)造函數(shù)陷嘴,用來(lái)生成 Set 數(shù)據(jù)結(jié)構(gòu),數(shù)組作為參數(shù)间坐。
每一項(xiàng)即是鍵也是值灾挨。
1邑退、創(chuàng)建一個(gè)Set;
2涨醋、Set類的屬性--size
3瓜饥、Set類的方法
Set.add(value) 添加一個(gè)數(shù)據(jù),返回Set結(jié)構(gòu)本身浴骂,允許進(jìn)行鏈?zhǔn)讲僮鳌?br>
Set.delete(value) 刪除指定數(shù)據(jù)乓土,返回一個(gè)布爾值,表示刪除是否成功溯警。
Set.has(value) 判斷該值是否為Set的成員趣苏,返回一個(gè)布爾值。
Set.clear() 清除所有的數(shù)據(jù)梯轻,沒有返回值食磕。
forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
數(shù)據(jù)結(jié)構(gòu)--map
JavaScript 的對(duì)象(Object),只能用字符串當(dāng)作鍵喳挑。這給它的使用帶來(lái)了很大的限制彬伦。ES6 提供了 Map 數(shù)據(jù)結(jié)構(gòu)。它類似于對(duì)象伊诵,但是“鍵”的范圍不限于字符串单绑,各種類型的值(包括對(duì)象)都可以當(dāng)作鍵。
1曹宴、創(chuàng)建一個(gè)map
2搂橙、map類的屬性--size
3帖族、map類的方法
map.set(key,value) :設(shè)置鍵名key對(duì)應(yīng)的鍵值value,然后返回整個(gè)map結(jié)構(gòu)泥栖,如果key已經(jīng)有值,則鍵值會(huì)被更新瞻润,否則就生成該鍵版扩,可以鏈?zhǔn)讲僮鳌?br>
map.get(key) get方法讀取key對(duì)應(yīng)的鍵值废离,如果找不到key,返回undefined
map.delete(key) 刪除某個(gè)鍵礁芦,返回true.如果刪除失敗蜻韭,返回false.
map.has(key) 方法返回一個(gè)布爾值,表示某個(gè)鍵是否在當(dāng)前map對(duì)象之中宴偿。
map.clear() 清除所有數(shù)據(jù)湘捎,沒有返回值
map.keys() 返回鍵名的遍歷器
map.values() 返回鍵名/鍵值的遍歷器
map.entries() 返回鍵值對(duì)的遍歷器
map.forEach() 使用回調(diào)函數(shù)遍歷每個(gè)成員诀豁。
數(shù)組和對(duì)象的擴(kuò)展
數(shù)組的擴(kuò)展方法
1窄刘、Array.from()方法用于將對(duì)象轉(zhuǎn)為真正的數(shù)組(類數(shù)組轉(zhuǎn)數(shù)組)
2、Array.of()方法用于將一組值舷胜,轉(zhuǎn)換為數(shù)組娩践。
3活翩、fill()方法使用給定值,填充一個(gè)數(shù)組翻伺。
對(duì)象的擴(kuò)展方法
1材泄、對(duì)象的簡(jiǎn)潔表示法
2、object.assign()用于對(duì)象的合并吨岭,將源對(duì)象的所有可枚舉屬性拉宗,復(fù)制到目標(biāo)對(duì)象。
掌握class的寫法及繼承
應(yīng)用
1.了解class面向?qū)ο缶幊?br> 2.掌握es6語(yǔ)法的靈活運(yùn)用
綜合應(yīng)用
3.封裝拖拽效果
4.封裝常見兼容