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