標籤:
參考型別是一種資料結構,也稱作對象定義,類似於類的概念。
對象是參考型別的執行個體。
javascript參考型別有:Object, Array, Date, RegExp, Function
使用new 關鍵字聲明一個參考型別的執行個體。
一 Object
兩種建立對象的方法。
obj = new Object()//對象聲明obj = {}//對象字面量
對象字面量建立對象,並不會調用Object建構函式
二 Array
1.可以通過length屬性刪除或建立新的數組項
arr = [1,2,3];arr.length = 4;//增加 [1,2,3,undefined]arr.length = 2;//刪除 [1,2]
arr[6] = 6; // [1,2,3,undefined,undefined,6]
2.檢測數組
Array.isArray()
3.轉換方法
調用數組的toString()方法,返回由數組中每個值的字串形式拼接而成的一個以逗號分隔的字串。實際上,為了建立這個字串,會調用數組每一項的toString()。
4.棧方法
棧是一種LIFO資料結構,資料插入和刪除都發生在棧的頂部位置。
push(), 接受任意數量的參數,把他們逐個添加到數組的末尾,並返回新的數組長度(入棧)
pop(), 刪除數組最後一個元素,並返回刪除項的值(出棧)
5.隊列方法
隊列方法 是FIFO資料結構。
shift(), 刪除數組第一項並返回該項的值(隊列頭部出)
push(), 從數組末尾插入若干項(隊列尾部入)
或
unshift(), 從數組頭部插入若干項,並返回新長度(隊列頭部入)
pop(), 刪除數組最後一項 (隊列尾部出)
6.重排序方法
reverse() 和 sort() 返回的是經過排序後的數組
7.操作方法
concat() 用於串連兩個或多個數組。最終返回一個一維數組。它不會改變原有數組的值,返回的是副本
slice() 基於當前數組中的一個或多個項建立一個新數組。接受1或2個參數。第一個是返回項的起始位置,第二個為結束位置
splice() 強大的方法。可以做刪除、插入、替換。接受3個參數。參數1,起始位置; 參數2,要刪除的項目數; 參數3, 要插入的項。參數還可以傳任意多個,之後的都作為要插入的項按順序插入到數組中
8.位置方法
indexOf() ,lastIndexOf() 都接受1個參數,最多可接受2個。參數1,要尋找的值; 參數2, 尋找的起點位置的索引。從數組的下標0開始搜尋。lastIndexOf() 從最後一個位置開始向前尋找。返回尋找的值在數組中的位置,找不到返回-1
9.迭代方法
每個方法都接收兩個參數。參數1,在每一項上啟動並執行函數;參數2, 運行該函數的範圍對象
every() 數組中每一項運行給定函數, 如果該函數對每一項都返回true,則該方法返回true
filter() 數組中每一項運行給定函數, 返回該函數會返回true的項組成的數組
forEach() 對數組的每一項運行給定的函數, 無傳回值
map() 對數組的每一項運行給定的函數, 返回每次函數調用的結果組成的數組。
some() 對數組的每一項運行給定的函數, 如果該函數對任一項返回true, 則返回true
10.歸併方法
reduce() ,reduceRight() 這兩個方法都接收兩個參數。參數1,數組每一項上調用的函數;參數2,可選,作為歸併基礎的初始值。傳遞給reduce(),reduceRight()的函數接受4個參數。前一個值、當前值、項的索引和數組對象。這個函數返回的任何值都會作為第一個參數自動傳遞給數組的下一項。
var values = [1,2,3,4,5];var sum = values.reduce(function(prev, cur, index, array){ return prev + cur;});alert(sum);//15
三 Date
new Date() 在不傳遞參數的情況下,新建立的對象自動獲得當前日期和時間。參數接收毫秒的timestamp
Date.parse() 接收表示日期的字串,返回相應的日期毫秒數timestamp。日期文字的格式會因為瀏覽器地區設定的不同而不同。如果傳入的字串不能解析,則返回NaN
Date.UTC() 接收的參數分別是年份、基於0為一月的月份、月中的日期,1-31、小時,0-23、分鐘、秒、毫秒。這些參數只有年和月是必需的。
1.繼承的方法
toLocalString() 按照與瀏覽器設定的地區相適應的格式返回日期和時間
toString() 通常返回帶有時區資訊的日期和時間,其中時間一般以軍用時間表示。
valueOf() 不返回字串,而是返回日期的毫秒錶示。因此可以直接使用比較操作符來比較日期值
四 RegExp
格式:
var expression = / pattern / flags;
1.flags 為標誌。分別為g、i、m。
g:表示全域模式。即模式將匹配所有的字串,而不是在發現第一個匹配項時就立即停止。
i:表示不區分大小寫。
m:表示多行模式,即在到達一行文本末尾時還會繼續尋找下一行。
2.RegExp執行個體的屬性
global:是否設定了g標誌;
ignoreCase:是否設定了i標誌;
lastIndex:表示開始搜尋下一個匹配項的字元位置,從0算起;
multiline: 是否設定了m標誌;
source: 模式的字串表示
var pattern = /\[bc\]at/i;alert(pattern1.global); //falsealert(pattern1.ignoreCase); //true alert(); //falsealert(); //0alert(); //"\[bc\]at"
3.RegExp執行個體方法
exec() 接收1個參數。為藥應用模式的字串。
var text = "father and mother i love you"; var pattern = /i love you/gi; var matched = pattern.exec(text);
五 Function類型
每個函數都時Function類型的執行個體。函數也是對象。
聲明函數:
function func_name () {} //javascript解析器會在程式執行時率先讀取函式宣告,使其在執行任何代碼之前可用(可訪問) var func_name = function(){}; //解析器執行到它所在的程式碼,才會被解釋執行。
因此函數名是個變數,儲存的是指向函數對象的指標,不會與某個函數綁定,與包含對象指標的其他變數沒什麼區別。
1.沒有重載
聲明兩個同名的函數,第二個會覆蓋掉第一個
2.作為值的函數
函數名本身就是變數。因此函數體可以當作值來使用。可以當參數進行傳遞,也可以當其他函數的傳回值。
function callSomeFunction (someFunction, someArgument){ return someFunction(someArgument); }
3.函數內部屬性
函數內部有兩個特殊的對象:arguments 和 this
*arguments對象儲存的是所有傳入函數內部的參數。
*arguments.callee。這是一個指標,指向擁有該arguments對象的函數
function factorial(num) { if(num <=1){ return 1; }else{ return num*arguments.callee(num-1);//遞迴調用 //相當於: //return num*factorial(num - 1); //這樣消除了函數名與內部遞迴調用函數名的緊密耦合性 }}
*this 引用的是函資料以執行的環境的變數對象。
*caller 對象屬性。此屬性儲存的是調用當前對象的函數的引用。如果在全域範圍中調用當前函數,值為null
function outer(){ inner(); }function inner(){ alert(arguments.callee.caller);}outer();//返回outer()函數的原始碼
4.函數屬性和方法
length --- FunctionObject.length 函數參數的個數。函數沒有參數,則返回0
apply() --- Function.apply(scope[ ,Function.arguments||Array])//傳遞的參數可以為Arguments對象,也可以為參數數組
call() --- Function.call(scope[, argument1,argument2,.......])//所要傳遞的參數必須一一列舉吹來
這兩個函數都是擴充它自身運行時所在的範圍。參數1,這兩個函數運行時所在的範圍(一般都為對象);參數2, 傳遞給這個函數的參數。
window.color = ‘red‘;var o = {‘color‘:‘blue‘};function sayColor(){ alert(color); }sayColor(); // redsayColor.call(this) //redsayColor.call(window) //redsayColor.call(o) //blue
使用這兩個函數的好處是:降低對象與方法之間的耦合性。
六 基本封裝類型
未完待續。。。。。。
javascript學習筆記 - 參考型別