當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
《JavaScript高级程序设计》Chapter 5 引用类型
生活随笔
收集整理的這篇文章主要介紹了
《JavaScript高级程序设计》Chapter 5 引用类型
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Chapter 5 引用類型
- 使用表格進(jìn)行歸納,對(duì)表格中某些內(nèi)容會(huì)進(jìn)行必要解釋,并把解釋放在表格下方。
| ? | Object類型 | Array類型 | Date類型 | RegExp類型 | Function類型 | 基本包裝類型 |
| 創(chuàng)建方法 | 構(gòu)造函數(shù)、字面量 | 構(gòu)造函數(shù)、字面量 | 構(gòu)造函數(shù)Date(),顯示或者隱式的配合Date.parse(日期字符串)以及Date.UTC(...)來使用。 | 字面量、構(gòu)造函數(shù) | 函數(shù)聲明、 函數(shù)表達(dá)式(構(gòu)造函數(shù)聲明) | 隱式創(chuàng)建、 顯示創(chuàng)建(各自的構(gòu)造函數(shù)、Object的類工廠方法) |
| 構(gòu)造函數(shù)的屬性 | ? | ? | ? | 適用于作用域中的所有表達(dá)式,且基于執(zhí)行的最近一次正則表達(dá)式的操作而變化,可以通過長(zhǎng)屬性名或者短屬性名來進(jìn)行訪問。 opera和IE不完全支持,格式:RegExp.attribute): input, lastMatch, lastParen, leftContext, rightContext, multiline, $1, $2, $3,... | 函數(shù)內(nèi)部的屬性: 和構(gòu)造函數(shù)的屬性以及函數(shù)的屬性有一定的差別,因?yàn)槭前l(fā)生在函數(shù)內(nèi)部的。 函數(shù)內(nèi)部有兩個(gè)特殊對(duì)象arguments和this,其中this指向當(dāng)前的環(huán)境: arguments.callee-->指向包含它的函數(shù)引用 caller(ES5)--->指向調(diào)用這個(gè)函數(shù)的函數(shù)。全局環(huán)境下為null 注意,ES5的嚴(yán)格模式下,會(huì)出問題。 | ? |
| 訪問/讀取 | 點(diǎn)表示法、方括號(hào)表示法,后者應(yīng)用在前者不適合的場(chǎng)景:屬性名為變量、屬性名含空格等。建議采用點(diǎn)表示法 | 方括號(hào):array1[index]; length | ? | ? | ? | ? |
| 檢測(cè) | instanceof | instanceof Array.isArray(value);注意:isArray()是Array對(duì)象的一個(gè)方法。 | instanceof | instanceof | instanceof | instanceof |
| 轉(zhuǎn)換方法 (繼承的方法) | valueOf()方法 toString()方法 toLocaleString()方法 | 同左。 join()方法 調(diào)用toString()方法返回每個(gè)值得字符串形式拼接的以逗號(hào)分隔的字符串。valueOf()仍然返回?cái)?shù)組。 toString()(toLocaleString())實(shí)際上調(diào)用了數(shù)組中每一個(gè)值得toString()(toLocaleString())方法 | 對(duì)toLocaleString()、toString()重新定義,前者配合當(dāng)前地區(qū)放回適當(dāng)信息(一般含AM、PM,不含時(shí)區(qū)),后者含時(shí)區(qū)。不同瀏覽器不一樣。 valueOf()返回時(shí)間的毫秒值(相對(duì)于UTC:1970.1.1零時(shí)) | toLocaleString()、toString()返回字面量形式的樣式字符串(即使通過構(gòu)造函數(shù)創(chuàng)建) | 同左。 三個(gè)繼承而來的方法會(huì)返回這個(gè)函數(shù)的代碼。 | 同左: - Boolean的返回true/false或者"true"/"false" - Number返回相應(yīng)的數(shù)值或者字符串。toString()還可以規(guī)定返回的進(jìn)制數(shù)。 - String:返回這個(gè)字符串 |
| 屬性 | ? | ? | ? | global, ignoreCase, multiline; lastIndex:開始搜索下一個(gè)匹配項(xiàng)的字符位置 source:正則表達(dá)式的字符串表示,按照字面量的形式表示(無雙重轉(zhuǎn)義) | length:存儲(chǔ)函數(shù)希望傳入的參數(shù)的長(zhǎng)度 prototype:原型,保存所有實(shí)例方法的真正所在,不可枚舉,因此無法通過for-in發(fā)現(xiàn) | ? |
| 方法 | ? | 棧方法(LIFO): 在數(shù)組末尾push()、pop() 隊(duì)列方法(FIFO): 正向隊(duì)列:在數(shù)組末尾push()、在數(shù)組前端shift(); 反向隊(duì)列:在數(shù)組前端unshift()、在數(shù)組末尾pop() 注意進(jìn)入數(shù)組后的順序(可以實(shí)際試驗(yàn)一下) 重排序方法(返回排序后的數(shù)組): reverse()、sort() 操作方法: concat()--創(chuàng)建數(shù)組副本,追加新值 slice()---創(chuàng)建新數(shù)組,得到指定段的切割后的數(shù)組 spice()--參數(shù)(靈活):起始位置、要?jiǎng)h除的項(xiàng)數(shù)、新加入的值。改變?cè)瓟?shù)組,返回刪除的值。 位置方法: indexOf() lastIndexOf()返回所在的位置。 迭代方法(不會(huì)修改原數(shù)組的值) every()--每項(xiàng)返回true則true some()--有項(xiàng)返回true則true filter()--返回返回true的項(xiàng)組成的數(shù)組 map()--“映射”,返回每一項(xiàng)的結(jié)果組成的數(shù)組 forEach()--對(duì)每一項(xiàng)運(yùn)行函數(shù),無返回--有些像for語句迭代數(shù)組。 縮小方法(返回最終的那個(gè)值,所以“縮小”): reduce(); reduceRight(); | Date.now()---顧名思義,相當(dāng)于+new ? Date()//字符串 將日期格式化成字符串(因?yàn)g覽器而異) toDateString() toLocaleDateString() toTimeString() toLocaleTimeString() toUTCString() toGMTString() 日期/時(shí)間組件方法(Date類型的具體方法,用于獲取特定部分的時(shí)間或者日期信息)如: getTime() setTime() getFullYear() getDate() ... | exec() 傳入待匹配的字符串。 返回一個(gè)數(shù)組: 數(shù)組有兩個(gè)屬性:index和input 數(shù)組第一項(xiàng)為第一個(gè)匹配的字符串,后面項(xiàng)依次為與各捕獲組匹配的字符串。 即使flags設(shè)置為g,exec()方法返回?cái)?shù)組的第一項(xiàng)仍然是第一個(gè)匹配的字符串,然而對(duì)下一次調(diào)用exec()的數(shù)組的index和正則表達(dá)式本身的lastIndex會(huì)有影響。 test() 傳入待匹配的字符串 返回是否匹配true/false | 設(shè)置函數(shù)發(fā)生時(shí)候的環(huán)境: apply()、 call() 第一個(gè)參數(shù)均為環(huán)境值,第二參數(shù)前者可以是對(duì)象或者數(shù)組,后者必須一一列出。 - ES5中,如果不作說明,this不會(huì)自動(dòng)變成window而是undefined。這個(gè)時(shí)候apply()和call()就起作用了。 綁定一個(gè)環(huán)境(一般會(huì)接著賦給一個(gè)新的函數(shù)指針): bind()好處在于不需要這個(gè)環(huán)境(對(duì)象)與函數(shù)發(fā)生任何耦合關(guān)系。(不需要將這個(gè)函數(shù)作為方法寫進(jìn)這個(gè)對(duì)象中) | Number: toFixed()--規(guī)定小數(shù)位數(shù) toExponential()--規(guī)定小數(shù)部分位數(shù) toPrecision()--規(guī)定所有的(不包括指數(shù)部分)的位數(shù),會(huì)考慮情況選擇合理的方式顯示(toFixed()or toExponential()) String: length屬性 字符方法: charAt(index), charCodeAt(index), 像數(shù)組一樣用方括號(hào)進(jìn)行索引 字符串方法: concat():顧名思義,拼接字符串,不會(huì)改變?cè)址?slice() substring() substr() 參數(shù)為正的情況下,前兩者輸入兩個(gè)參數(shù):開始索引和結(jié)束索引(不包含),后者輸入兩個(gè)參數(shù):開始索引和想要切割對(duì)字符個(gè)數(shù)。 負(fù)數(shù)的時(shí)候,slice()會(huì)將負(fù)的參數(shù)與length相加,substring會(huì)將負(fù)的參數(shù)變成0,substr會(huì)將第一個(gè)負(fù)(表示索引)的參數(shù)與length相加,第二個(gè)負(fù)(表示個(gè)數(shù)的)變成0 字符串位置方法: indexOf() lastIndexOf() 刪除空格: trim(), trimLeft(), trimRight() 字符串大小寫轉(zhuǎn)換: toLowerCase() toLocaleLowerCase() toUpperCase() toLocaleUpperCase() 字符串模式匹配的方法: match() -- 與正則表達(dá)式的exec()很像 search()返回第一個(gè)匹配的索引的位置 replace()顧名思義,匹配之后替換,第二個(gè)參數(shù)還可以是函數(shù),進(jìn)行有選擇的替換,功能強(qiáng)大。 split()根據(jù)參數(shù)分割字符串,返回?cái)?shù)組,數(shù)組長(zhǎng)度可以由第二個(gè)參數(shù)確定。 localeCompare()方法:與字符串參數(shù)進(jìn)行比較,排在前面為負(fù),后面為正,相同位置為0(同樣結(jié)合數(shù)軸進(jìn)行理解) fromCharCode()將接收到的參數(shù)編成字符串,charCodeAt()字符串層面的反操作。 HTML方法: 提供一些方法,將字符串寫到特定的標(biāo)記之中,避免使用這個(gè)方法,因?yàn)閷?duì)瀏覽器以來。 |
- 引用類型(一類,與“類”相似,但實(shí)際上,JS并沒有類的概念),對(duì)象定義--->引用類型的值(對(duì)象)的一個(gè)實(shí)例。
- new+構(gòu)造函數(shù)--->創(chuàng)建一個(gè)引用類型的實(shí)例。
- 原生引用類型:下面羅列的這些都屬于原生引用類型。
- Object類型
- 一般來說,通過字面量創(chuàng)建的對(duì)象實(shí)例不會(huì)調(diào)用構(gòu)造函數(shù)。
- Array類型
- JS數(shù)組同樣是有序表,但比起其他語言靈活許多,可以存儲(chǔ)的數(shù)據(jù)類型十分靈活。
- 檢測(cè)數(shù)組:instanceof只適合單一網(wǎng)頁(yè)(全局作用域)的情況,多個(gè)全局執(zhí)行環(huán)境可以使用Array.isArray()方法。
- sort方法默認(rèn)升序排列,且調(diào)用toString()按照字符串排列,最好和比較函數(shù)連用。對(duì)于比較函數(shù)返回的正負(fù)數(shù)與升降序的關(guān)系,可以結(jié)合一維坐標(biāo)理解。
- slice()方法中的兩項(xiàng)不包含結(jié)尾那項(xiàng)。參數(shù)為負(fù)數(shù),則用數(shù)組長(zhǎng)度加上該參數(shù)。若結(jié)束位置小于起始位置,則返回空數(shù)組。
- 迭代方法:參數(shù)為函數(shù),以及可選的作用域。函數(shù)的參數(shù)有三個(gè):數(shù)組項(xiàng)的值,索引,數(shù)組對(duì)象自己。(value, index, array)
- 縮小方法:參數(shù)為函數(shù),以及(可選的)初始值。函數(shù)參數(shù)有4個(gè):prev, cur, index, array
- Date類型
- Date()不傳入?yún)?shù)的時(shí)候可以獲取當(dāng)前時(shí)間。傳入?yún)?shù)的話需要毫秒值,這個(gè)時(shí)候就可以隱式或者顯式的配合Date.parse()/Date.UTC()將日期/時(shí)間轉(zhuǎn)換為毫秒值之后再傳入。
- RegExp類型
- 字面量創(chuàng)建:var expressions = /patterns/flags
- 構(gòu)造函數(shù)創(chuàng)建: var expressions = new RegExp("patterns", "flags");
- 構(gòu)造函數(shù)創(chuàng)建的時(shí)候需要對(duì)patterns進(jìn)行雙重轉(zhuǎn)義處理(一般是針對(duì)“\”符號(hào)),flags可以是g、m、i。
- ES3創(chuàng)建的正則表達(dá)式字面量共享一個(gè)RegExp實(shí)例,而構(gòu)造函數(shù)則是不同的。共享一個(gè)RegExp實(shí)例會(huì)對(duì)下一次匹配的開始索引產(chǎn)生印象。ES5將這一點(diǎn)糾正。
- Function類型
- 函數(shù)聲明語法會(huì)發(fā)生“聲明提前”,而作為表達(dá)式,函數(shù)表達(dá)式只有執(zhí)行到這里的時(shí)候才會(huì)進(jìn)行解釋。
- 構(gòu)造函數(shù)創(chuàng)建functoin實(shí)例同樣屬于函數(shù)表達(dá)式,傳入的最后一個(gè)參數(shù)始終會(huì)被認(rèn)為是函數(shù)體的執(zhí)行代碼。由于經(jīng)歷了兩次解析,所以不推薦這種方式。
- 注意理解,“函數(shù)是對(duì)象,函數(shù)名是指針”。函數(shù)是對(duì)象,有方法和屬性,函數(shù)名是指針,實(shí)際上是指向函數(shù)的一個(gè)引用而已--->函數(shù)沒有重載,就是因?yàn)楹瘮?shù)的名稱實(shí)際上只是引用,指向同一位置。
- 注意,區(qū)分this所指的環(huán)境與函數(shù)本身引用的位置的差別,二者是不同的概念:注意:無論在window下調(diào)用this還是在什么其他的對(duì)象環(huán)境中調(diào)用,雖然this的指向環(huán)境不一樣,但是函數(shù)的引用(函數(shù)名)始終指向一個(gè)函數(shù)的位置。?
- 函數(shù)是對(duì)象,是值,所以可以傳入到另一個(gè)函數(shù),也可以作為值被返回:訪問函數(shù)指針而不是執(zhí)行函數(shù),不需要圓括號(hào),例如,訪問指針:addSum 執(zhí)行函數(shù) addSum() 可以幫助理解以后的內(nèi)容。?
- 基本包裝類型
- 基本類型有的時(shí)候需要一些屬性和方法,這顯然不該發(fā)生在基本類型身上(基本類型不該有屬性和方法)。為了解決這一問題出現(xiàn)了對(duì)應(yīng)的基本包裝類型Number、Boolean、String。
- 實(shí)際上,當(dāng)我們對(duì)基本類型使用方法或者屬性的時(shí)候,后臺(tái)隱式創(chuàng)建了對(duì)應(yīng)的基本包裝類型(然而聲明周期很短,使用完成之后便銷毀。)
- 不僅可以通過各自的構(gòu)造函數(shù)顯示創(chuàng)建基本包裝類型,還可以通過Object的類工廠函數(shù)的方法創(chuàng)建:var v = new Object(true)--此舉創(chuàng)建了個(gè)Boolean包裝類型。
- 這里提出了一個(gè)需要區(qū)分的地方(雖然我認(rèn)為并沒有什么必要):Number()和new Number()的區(qū)別。前者是轉(zhuǎn)型函數(shù)(轉(zhuǎn)換為數(shù)字),后者為構(gòu)造函數(shù),所以利用typeof的時(shí)候,前者是“number”,后者是“object”?
- 再次理解typeof和instanceof的區(qū)別:
- typeof someThing:返回字符串。區(qū)分具體的基本類型(boolean\number\string\null\undefined)和引用類型(object)以及特別些的function
- someThing instanceof object/String/Boolean/Number/Function/RegExp/Date/Array -- 區(qū)分具體的引用類型。
-
- Boolean造成誤解的地方:基本包裝類型都會(huì)被認(rèn)為是true:所以無論new Boolean(true)還是new Boolean(false)放在邏輯判斷語句中都會(huì)被認(rèn)為是true。
- alert()函數(shù)接收的是字符串?dāng)?shù)據(jù)。
- 單體內(nèi)置對(duì)象
- Global:所有不屬于其他對(duì)象的屬性和方法都屬于Global(即無法嚴(yán)格分類的那些)
- 方法:
- URL編碼、解碼方法: ecodeURL()/ecodeURLComponent/decodeURL/decodeURLComponent
- 方法:
- Global:所有不屬于其他對(duì)象的屬性和方法都屬于Global(即無法嚴(yán)格分類的那些)
-
-
-
- eval()方法:輸出執(zhí)行的結(jié)果、將原位置替換位代碼段。由于是按照字符串解析,所以不會(huì)出現(xiàn)函數(shù)聲明的提升。注意防止代碼注入,慎用。
- 屬性:如undefined、NULL、NaN、String、Object等等
- 通過window對(duì)象取得Global對(duì)象
-
- Math:存儲(chǔ)數(shù)學(xué)方法和屬性的對(duì)象。
-
轉(zhuǎn)載于:https://www.cnblogs.com/ideal-idiot/p/7714493.html
總結(jié)
以上是生活随笔為你收集整理的《JavaScript高级程序设计》Chapter 5 引用类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html图片标签和语义化标签和音频
- 下一篇: JavaScript DOM 编程艺术