在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一起,描述的是一類對象所具有的屬性和方法。而對象是某個特定引用類型的實例。 一、Object類型 可以通過Object構造函數創建一個創建Object實例,但常用方式是使用對象字面量表示法,這種方式可以簡化創建包含大量屬性的對象 ...
在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一起,描述的是一類對象所具有的屬性和方法。而對象是某個特定引用類型的實例。
一、Object類型
可以通過Object構造函數創建一個創建Object實例,但常用方式是使用對象字面量表示法,這種方式可以簡化創建包含大量屬性的對象的過程,需要註意的是數值屬性名會自動轉換為字元串。
訪問對象屬性有兩種方法:點表示法和方括弧表示法。方括弧的優點體現在1.可以通過變數來訪問屬性、2.如果屬性名包括導致語法錯誤的字元或者保留字以及關鍵字,點表示法不太合適。但是一般建議使用點表示法訪問對象的屬性。
二、Array類型
ECMAScript數組的每一項可以保存任何類型的數據,而且數組的大小是可以動態調整的,即可以隨著數據的添加自動增長以容納新的數據。
同Object類型可以通過Object構造函數創建一個Object對象實例,我們也可以通過Array構造函數創建數組。也可以通過數組字面量表示法創建。
訪問數組的元素時可以通過索引訪問,索引從0開始。如果要改變數組的元素也可以通過索引設置。通過數組的length屬性可以動態改變數組的大小。數組的最大長度是2的32次方-1.
檢測數組的方法:Array.isArray(value)。
1.轉換方法
數組繼承的toLocaleString()、toString()、valueOf()方法,在預設情況下都會以逗號分隔的字元返回所有數組的元素。alert數組名也可以輸出數組的所有的數組項,但是這一操作還是調用了數組的toString()方法。
數組的join()方法重現了toString()方法,但是它還可以改變分隔符。
2.棧方法
pop()方法:移出數組的最後一項,返回刪除項
push()方法:添加某變數到數組的末尾,返回新數組的長度
3.隊列方法
shift()方法:移出數組的第一項,返回刪除項
unshift()方法:添加某變數到數組的開頭,返回新數組的長度
4.重排序方法
reverse()方法:將數組反序
sort()方法:按升序排列數組項,(機制是調用每個數組項的toString()方法,然後比較進行排序),此方法可以接收一個函數(稱為比較函數),比較函數可以通過一個<0、>0或者=0的值來影響排序的結果。
上述兩種方法均返回新數組。
5.操作方法
concat()方法:基於當前數組的所有項創建一個新數組,此外,這個方法還可以用於引用類型數組類型的深拷貝,就是拷貝後的數組與原來的數組完全獨立。
slice()方法:能夠基於當前數組中的一或多個項創建一個新數組,其操作不影響原數組。接收兩個參數,表示起始和結束(不包括結束位置的項),若參數為一個,則結束預設到數組最後一位。該方法主要用於向數組的中部插入項,同時也可以利用此方法對數組 進行刪除、插入或者替換等操作。
splice()方法:用於截取數組,返回一個截取下來的數組。這個方法會改變原數組。
6.位置方法
indexOf()和lastIndexOf()方法,查找時是使用全等操作符比較。
7.迭代方法
ECMAScript5定義了5種迭代方法,且這5種方法不會改變原數組。
every():對數組的每一項運行函數,如果該函數對每一項都返回true,則該方法返回true。
filter():對數組中的每一項運行函數,返回由該函數會返回true的項組成的數組。
forEach:本質上與使用for迴圈迭代數組一樣,沒有返回值。
map:對數組中的每一項運行函數,返回由函數返回結果組成的數組。
some:對數組中的每一項運行函數,若函數對任意一項返回true,則返回true。
8.歸併方法
reduce()方法和reduceRight()方法,迭代數組,接收四個參數:前一項、後一項、索引、數組對象
三、Date類型
日期類型在實際生產開發中很常用。mark幾個概念。預設從1970年1月1日零時開始計算。
Date.parse()方法:接收一個表示日期的字元串參數,返回該日期到預設的毫秒數
Date.UTC()方法:返回結果同Date.parse()方法,它接收的參數分別是年月日時分秒毫秒,年月是必須的參數。
Date.now()方法:返回表示調用這個方法時的日期和時間的毫秒數。如果瀏覽器不支持該方法,可以利用+操作符,即+Date.now()
關於Date類型的方法,書上介紹很詳細,有很多,可以參考JS紅寶書P100-P102
四、RegExp類型
即正則表達式、俗稱火星文。初學JS,我是拒絕學習這個的,但是實際開發中,由於數據的複雜性,也遇到很多需要利用正則的地方。
模式+標誌:模式由元字元組成,包括:([{\^$|)?*+.]} 標誌包括:g(全局)、i(不區分大小寫)、m(多行模式)
五、Function類型
JS中每個函數都是Function類型的實例,作為引用類型同樣具有屬性和方法。函數名可以看做是一個指向函數對象的指針。註意:使用不帶圓括弧的函數名是訪問函數指針,而非調用函數。
1.函數聲明與函數表達式
解析器在向執行環境中載入數據時,會率先讀取函數聲明,並使其在執行任何代碼之前可以訪問。而對於函數表達式,則必須等到解析器執行到函數表達式所在的位置,它才會被解釋執行。
2.函數作為值
在JS中,函數名本身是變數,因此,函數可以作為值使用。這一點在回調函數callBack中經常使用到。
3.函數內部屬性
arguments:類數組對象,包含傳入函數中的所有參數,其屬性callee是一個指針,指向包含這個arguments對象的函數。
this:它引用的是函數據以執行的環境對象。
caller:保存著調用當前函數的函數的引用,如果是在全局作用域中調用當前函數,則其值為null。另外,其不能被賦值。
4.函數屬性和方法
length:表示函數希望接收的命名參數的個數。
prototype:保存ECMAScript中引用類型的所有實例方法。
函數的方法主要包括apply()和call(),它們二者的區別就是傳參的方式不同。前者接收一個運行函數的作用域和一個參數數組;後者的第二個參數則需要註意列舉參數。它們的主要作用是改變函數賴以運行的作用域。
六、基本包裝類型
基本包裝類型的存在意義就是為了便於操作基本類型值,在ECMAScript中,基本包裝類型主要包括:Boolean、Number、String。
引用類型和基本包裝類型的主要區別是對象的生存期不同。由於這個區別,不能給基本包裝類型值添加屬性和方法。
1.Number類型
toFixed():指定保留幾位小數
toExponential():指數表示法
toPrecision():指定有效數字的位數
2.String類型
鑒於String類型的許多方法與Array類型的方法有很多相似的,所以就不詳細介紹了,前面也有一篇關於JS字元串方法的歸納總結:JS字元串方法
七、單體內置對象
(1)Global對象
不屬於任何其他對象的屬性和方法,最終都屬於它的屬性和方法。
1.URI編碼方法
encodeURI():主要用於整個URI,只對空格進行編碼替換
encodeURIComponent():主要用於對URI中的某一片段進行編碼,對所有非字母數字字元進行編碼替換
對應的解碼方法:decodeURI()和decodeURIComponent()
2.eval()方法
eval()方法不推薦使用,因為容易引起惡意用戶的代碼註入。lue。
3.Global對象的屬性
見JS紅寶書P133表格
4.window對象
全局對象以訪問window對象實現。
(2)Math對象
Math對象的方法十分強大和實用。
常用的如下:
min()和max()方法:確定一組數值中的最小值和最大值
Math.ceil():向上舍入
Math.floor():向下舍入
Math.round():四捨五入
Math.random():返回大於等於0小於1的一個隨機數。求區間[min,max]的隨機數:Math.random()*max+min
Math.abs():返回絕對值
Math.sqrt():求平方根