今天我們來(lái)說(shuō)說(shuō)JS的復(fù)雜數(shù)據(jù)類(lèi)型巷挥。數(shù)組 、對(duì)象稱(chēng)為復(fù)雜類(lèi)型验靡,也稱(chēng)為引用類(lèi)型倍宾。比如數(shù)組 函數(shù) 正則 時(shí)間函數(shù) 都屬于對(duì)象類(lèi)型,當(dāng)然也屬于復(fù)雜數(shù)據(jù)類(lèi)型晴叨。
如何查看一個(gè)變量是何種數(shù)據(jù)類(lèi)型呢凿宾?使用關(guān)鍵字 typeof 或者 instanceof .
在 JavaScript 中,判斷一個(gè)變量的類(lèi)型嘗嘗會(huì)用 typeof 運(yùn)算符兼蕊,在使用 typeof 運(yùn)算符時(shí)采用引用類(lèi)型存儲(chǔ)值會(huì)出現(xiàn)一個(gè)問(wèn)題初厚,無(wú)論引用的是什么類(lèi)型的對(duì)象,它都返回 “object”孙技。這就需要用到instanceof來(lái)檢測(cè)某個(gè)對(duì)象是不是另一個(gè)對(duì)象的實(shí)例产禾。
數(shù)組
創(chuàng)建數(shù)組的方式有兩種方式 : 構(gòu)造函數(shù)和字面量
構(gòu)造函數(shù)
1.無(wú)參構(gòu)造函數(shù),創(chuàng)建一空數(shù)組
var a1 = new Array();
2.一個(gè)數(shù)字參數(shù)構(gòu)造函數(shù)牵啦,指定數(shù)組長(zhǎng)度(由于數(shù)組長(zhǎng)度可以動(dòng)態(tài)調(diào)整亚情,作用并不大),創(chuàng)建指定長(zhǎng)度的數(shù)組
var a2 = new Array(5);
3.帶有初始化數(shù)據(jù)的構(gòu)造函數(shù)哈雏,創(chuàng)建數(shù)組并初始化參數(shù)數(shù)據(jù)
var a3 = new Array(4, 'hello', new Date());
字面量
1.使用方括號(hào)楞件,創(chuàng)建空數(shù)組衫生,等同于調(diào)用無(wú)參構(gòu)造函數(shù)
var a4 = [];
2.使用中括號(hào),并傳入初始化數(shù)據(jù)土浸,等同于調(diào)用帶有初始化數(shù)據(jù)的構(gòu)造函數(shù)
var a5 = [10];
注意點(diǎn)
1.在使用構(gòu)造函數(shù)創(chuàng)建數(shù)組時(shí)如果傳入一個(gè)數(shù)字參數(shù)罪针,則會(huì)創(chuàng)建一個(gè)長(zhǎng)度為參數(shù)的數(shù)組,如果傳入多個(gè)黄伊,則創(chuàng)建一個(gè)數(shù)組泪酱,參數(shù)作為初始化數(shù)據(jù)加到數(shù)組中
var a1 = new Array(5); console.log(a1.length);//5 console.log(a1); //[] ,數(shù)組是空的 var a2 = new Array(5,6); console.log(a2.length);//2 console.log(a2); //[5,6]
但是使用字面量方式,無(wú)論傳入幾個(gè)參數(shù)还最,都會(huì)把參數(shù)當(dāng)作初始化內(nèi)容
var a1 = [5];console.log(a1.length);//1console.log(a1); //[5]var a2 = [5,6];console.log(a2.length);//2console.log(a2); //[5,6]
2.使用帶初始化參數(shù)的方式創(chuàng)建數(shù)組的時(shí)候墓阀,最好最后不要帶多余的”,”,在不同的瀏覽器下對(duì)此處理方式不一樣
var a1 = [1,2,3,];console.log(a1.length);console.log(a1);
這段腳本在現(xiàn)代瀏覽器上運(yùn)行結(jié)果和我們?cè)O(shè)想一樣拓轻,長(zhǎng)度是3斯撮,但是在低版本IE下確實(shí)長(zhǎng)度為4的數(shù)組,最后一條數(shù)據(jù)是undefined
有var關(guān)鍵字聲明的變量和沒(méi)有var關(guān)鍵字聲明的變量有何區(qū)別悦即?
如果不加var 關(guān)鍵字 , 其結(jié)果相當(dāng)于window 對(duì)象的一個(gè)屬性
window.b = 1吮成。
棧方法和堆方法
push 向數(shù)組添加一個(gè)成員,放置數(shù)組的末尾辜梳,其它成員順次移動(dòng)粱甫。返回該數(shù)組的長(zhǎng)度。
pop 將數(shù)組的最后一個(gè)成員 刪除作瞄,其它成員順次移動(dòng)茶宵。返回刪除該數(shù)組成員。
unshift 向數(shù)組添加一個(gè)成員放置數(shù)組的第一位宗挥,其它成員順次移動(dòng)乌庶。返回該數(shù)組的長(zhǎng)度。
shift 將數(shù)組的第一個(gè)成員 刪除契耿,其它成員順次移動(dòng)瞒大。返回刪除的原數(shù)組成員。
其它數(shù)組方法
split 將一個(gè)字符串轉(zhuǎn)化為一個(gè)字符串?dāng)?shù)組搪桂。返回一個(gè)新的字符串?dāng)?shù)組透敌,原字符串無(wú)變化。
Join(separator) 將數(shù)組中的成員放入一個(gè)字符串中踢械,并返回該字符串酗电。
splice 任意位置添加/刪除數(shù)組中的成員,其它成員并順次移動(dòng)内列。對(duì)原數(shù)組進(jìn)行操作撵术。
1 如果有兩個(gè)參數(shù),第一個(gè)參數(shù)表示起始的下標(biāo)话瞧,第二個(gè)參數(shù)表示刪除的個(gè)數(shù)嫩与。
arr.splice(0,1)
從數(shù)組的下標(biāo)為0的開(kāi)始寝姿,刪除1個(gè)長(zhǎng)度的成員。返回刪除的數(shù)組成員划滋。
2 如果有N個(gè)參數(shù)会油,第一個(gè)參數(shù)表示起始的下標(biāo),第二個(gè)設(shè)置為0(表示沒(méi)有刪除),上下的表示要添加的數(shù)組成員古毛。
arr.splice(0,0,1)
從數(shù)組的下標(biāo)為0的開(kāi)始,添加1個(gè)長(zhǎng)度的成員都许。返回?cái)?shù)組的長(zhǎng)度稻薇。
slice 將原數(shù)組中一部分淺復(fù)制存入一個(gè)新的數(shù)組對(duì)象中,并返回這個(gè)新的數(shù)組 胶征,對(duì)原始數(shù)組沒(méi)有改變塞椎。
concact 將兩個(gè)數(shù)組拼接到一起.返回一個(gè)新的數(shù)組。
reverse 將數(shù)組中元素倒敘排列
sort 先要轉(zhuǎn)換為字符串 用ASCII碼 進(jìn)行比較