6.对象和数组
對象和數(shù)組
學(xué)習(xí)要點:
1.Object類型
2.Array類型
3.對象中的方法
什么是對象,其實就是一種類型,即引用類型。而對象的值就是引用類型的實例。在ECMAScript中引用類型是一
種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起。它也常被稱作為類,但ECMAScript中卻沒有這種東西。雖然
ECMAScript是一門面向?qū)ο蟮恼Z言,卻不具備傳統(tǒng)面向?qū)ο笳Z言所支持的類和接口等基本結(jié)構(gòu)。
一、Object類型
到目前為止,我們使用的引用類型最多的可能就是Object類型了。雖然Object的實例不具備多少功能,但對于在應(yīng)
用程序中的存儲和傳輸數(shù)據(jù)而言,它確實時非常理想的選擇。
創(chuàng)建Object類型有兩種。一種是使用new運算符,一種是字面量表示法。
1.使用new運算符創(chuàng)建Object
var box = new Object(); //new方式
box.name='journey'; //創(chuàng)建屬性字段
box.age=23; //創(chuàng)建屬性字段
2.new關(guān)鍵字可以省略
var box = Object(); //省略了new關(guān)鍵字
3.使用字面量方式創(chuàng)建Object
var box = { //字面量方式
name : 'journey', //創(chuàng)建屬性字段
age:23
}
4.屬性字段也可以使用字符串形式
var box = { //也可以使用字符串
'name':'journey',
'age':23
}
5.使用字面量及傳統(tǒng)賦值方式
var box = {}; //字面量方式聲明空的對象
box.name = 'journey'; //傳統(tǒng)賦值方式
box.age = 23;
6.兩種屬性輸出方式
alert(box.age); //點表示法輸出
alert(box['age']); //中括號表示法輸出,注意引號,用數(shù)組的方式輸出
PS:在使用字面量聲明Object對象時,不會調(diào)用Object()構(gòu)造函數(shù)(firefox除外)。
7.給對象創(chuàng)建方法
var box = {
num : function(){ //對象中的方法
return "運行";
}
}
alert(box num()); //調(diào)用對象中的方法,如果沒有圓括號,會打印代碼。有云括號
會打印返回值
//方法=函數(shù)
8.使用delete刪除對象屬性
delete box.name; //刪除屬性
在實際開發(fā)過程中,一般我們更加喜歡字面量的生命方式。因為它清晰,語法代碼少,而且還給人一種封裝的
感覺。字面量也是向函數(shù)傳遞大量可選參數(shù)的首選方式。
function box(obj){ //參數(shù)是一個對象
if(obj.name != undefined) alert(obj.name); //判斷屬性是否存在
if(obj.age != undefined) alert(obj.age);
}
box({ //調(diào)用函數(shù)傳遞一個對象,匿名對象
name : 'journey',
age : 23
})
再例如:
function box(obj){
alert(obj.name);
alert(obj.age);
}
var obj= {
name : 'journey',
age : 23
}
box(obj);
?
?
二、Array類型
除了Object類型之外,Array類型時ECMAScript最常用的類型。而且ECMAScript中的Array類型和其他語言中
的數(shù)組有著很大的區(qū)別。雖然數(shù)組都是有序排列,但ECMAScript中的數(shù)組每個元素可以保存任何類型。
ECMAScript中數(shù)組的大小也是可以調(diào)整的。
創(chuàng)建Array類型有兩種方式:第一種時new運算符,第二種時字面量。
1.使用new關(guān)鍵字創(chuàng)建數(shù)組
var box = new Array(); //創(chuàng)建一個數(shù)組,typeof box 返回object字符串?dāng)?shù)值屬于對象類型
var box = new Array(10); //創(chuàng)建一個包含10個元素的數(shù)組,必須是數(shù)字,必須是1位
var box = new Array('journey' , 23 , 男); //創(chuàng)建一個數(shù)組并分配好了元素
2.以上三種方法,可以省略new關(guān)鍵字。
var box = Array(); //省略了new關(guān)鍵字
3.使用字面量方式創(chuàng)建數(shù)組
var box = []; //創(chuàng)建一個空的數(shù)組
var box = ['journey' , 23 , 男]; //創(chuàng)建包含元素的數(shù)組
var box = [1,2,]; //禁止這么做,IE會識別3個元素
var box = [........]; //同樣,IE的會有識別的問題
PS:和Object一樣,字面量的寫法不會調(diào)用Array()構(gòu)造函數(shù)。(firefox除外)。
4.使用索引下標(biāo)來讀取數(shù)組的值
alert(box[2]); //讀取第三個元素
box[2]='學(xué)生'; //修改第三個元素
box[4]='計算機(jī)編程'; //修改第五個元素
var box = [];
box['name'] = 'journey';
box['age'] = 23;
alert(box['name']); //如果是字符串下標(biāo),不會體現(xiàn)在數(shù)組上,而要單獨拎出來
var box = [];
box[0] = 'journey';
box[1] = 23;
alert(box); //如果是索引下標(biāo),就會在數(shù)組上直接體現(xiàn)出來
?
5.使用length屬性獲取數(shù)組元素量
alert(box.length) //獲取元素的個數(shù)
box.length= 10; //強(qiáng)制元素的個數(shù) 以逗號擴(kuò)展補(bǔ)充
box[box.length]='JS 技術(shù)'; //通過length給數(shù)組增加一個元素
6.創(chuàng)建一個稍微復(fù)雜一點的數(shù)組
var box = [
{ //第一個元素是一個對象
name : 'journey',
age : 23,
num : function(){
return'run 了';
}
},
['馬云','李彥宏',new Object()], //第二個元素是數(shù)組
'江蘇', //第三個元素是字符串
25+25, //第四個元素是數(shù)值
new Array(1,2,3) //第五個元素是數(shù)組
];
alert(box);
PS:數(shù)組最多可以包含4294967295個元素,超出即會發(fā)生異常。
?
三、對象中的方法
轉(zhuǎn)換方法
對象或數(shù)組都具有toLocalString()、toString()和valueOf()方法,其中toString()和valueOf()無論重寫了誰,都
會返回相同的值。數(shù)組會將每個值進(jìn)行字符串形式的拼接,以逗號隔開。
var box = ['journey' , 23 , '男']; //字面量數(shù)組
alert(box); //隱式調(diào)用了toString()
alert(box.valueOf());
alert(box.toString()); //和valueOf()返回一致
alert(box.toLocalString()); //返回值和上面兩種一致
默認(rèn)情況下,數(shù)組字符串都已逗號隔開,如果使用join()方法,則可以使用不同的分隔符來構(gòu)建這個字符串。
var box = ['journey' , 23 , '計算機(jī)編程'];
alert(box.join('|')); //journey | 23 | 計算機(jī)編程 返回string字符串
棧方法
ECMAScript數(shù)組提供了一種讓數(shù)組的行為類似于其他數(shù)據(jù)結(jié)構(gòu)的方法。也就是說,可以讓數(shù)組像棧一樣,可以
限制插入和刪除項的數(shù)據(jù)結(jié)構(gòu)。棧是一種數(shù)據(jù)結(jié)構(gòu)(后進(jìn)先出),也就是說最新添加的元素最早被移除。而棧
中元素的插入(或叫棧入)和移除(或叫彈出),只發(fā)生在一個位置——棧的頂部。ECMAScript為數(shù)組專門
提供了push()和pop()方法。
pop()方法可以接收任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組的末尾,并返回修改后數(shù)組的長度。而pop()方法
則從數(shù)組末尾移除最后一個元素,減少書租的length值,然后返回移除的元素。
var box = ['journey' , 23 , '計算機(jī)編程'] //字面量聲明
alert(box.push('江蘇')); //數(shù)組末尾添加一個元素,并且返回長度
alert(box); //查看數(shù)組
box.pop(); //移除數(shù)組末尾元素,并返回移除的元素
alert(box); //查看元素
?
隊列方法
棧方法是后進(jìn)先出,而隊列方法是先進(jìn)先出。列隊在數(shù)組的末端添加元素,從數(shù)組的前端移除元素。通過push()
向數(shù)組末端添加一個元素,然后通過shift()方法從數(shù)組前端移除一個元素。
var box =['journey' , 23 , '計算機(jī)編程']; //字面量聲明
alert(box.push('江蘇')); //數(shù)組末尾添加一個元素,并且返回長度
alert(box); //查看數(shù)組
alert(box.shift()); //移除數(shù)組開頭元素,并返回移除的元素
alert(box); //查看數(shù)組
ECMAScript還為數(shù)組提供了一個unshift()方法,它和shift()方法的功能完全相反。
unshift()方法為數(shù)組的前端添加一個元素。
var box = ['journey' , 23 , '計算機(jī)編程']; //字面量聲明
alert(box.unshift('江蘇','無錫')); //數(shù)組開頭添加兩個元素
alert(box); //查看數(shù)組
alert(box.pop()); //移除數(shù)組末尾元素,并返回移除的元素
alert(box); //查看數(shù)組
?
PS:IE瀏覽器對unshift()方法總是返回undefined而不是數(shù)組的新長度。
重排序方法
數(shù)組中已經(jīng)存在兩個可以直接用來排序的方法:reverse()和sort()。
reverse() 逆向排序
var box = [1,2,3,4,5]; //數(shù)組
alert(box.reverse()); //逆向排序方法,返回排序后的數(shù)組
alert(box); //原數(shù)組也被逆向排序了
sort()從小到大排序
var box=[4,2,1,5,3,8,9]; //數(shù)組
alert(box.sort()); //從小到大排序,返回排序后的數(shù)組
alert(box); //原數(shù)組也被從小到大排序了
sort()方法的默認(rèn)排序在數(shù)字排序上有些問題,因為數(shù)字排序和數(shù)字字符串排序的算法是一樣的。我們必須修改
這一特征,修改的方式,就是給sort(參數(shù))方法傳遞一個函數(shù)參數(shù)。
這點可以參考手冊說明。
function compare(value1,value2){ //數(shù)字排序的函數(shù)參數(shù)
if(value1<value2){ //小于,返回負(fù)數(shù)
return -1;
}else if(value1>value2){ //大于,返回整數(shù)
return 1;
}else{
return 0;
}
}
var box = [0,1,5,10,15]; //驗證數(shù)字字符串,和數(shù)字的區(qū)別
alert(box.sort(compare)); //傳參
PS:如果要反向操作,即從大到小排序,正負(fù)顛倒即可。當(dāng)然,如果要逆序用reverse()更加方便。
操作方法
ECMAScript為操作已經(jīng)包含在數(shù)組中的元素提供了很多方法。concat()方法可以基于當(dāng)前數(shù)組創(chuàng)建一個新數(shù)組。
slice()方法課余基于當(dāng)前數(shù)組獲取指定區(qū)域元素并創(chuàng)建一個新數(shù)組。
splice()主要用途數(shù)向數(shù)組的中部插入元素。
var box = ['journey' , 23 , '計算機(jī)編程']; //當(dāng)前數(shù)組
var box2 = box.concat('江蘇'); //創(chuàng)建新數(shù)組,并添加新元素
alert(box2); //輸出新數(shù)組
alert(box); //當(dāng)前數(shù)組沒有任何變化
var box = ['journey' , 23 , '計算機(jī)編程','江蘇']; //當(dāng)前數(shù)組
var box2 = box.slice(1); //box.slice(1,3),2-4之間的元素
alert(box2); //28,計算機(jī)編程,江蘇
alert(box); //當(dāng)前數(shù)組
var box3 = box.slice(1,3); //這里不是從第一個位置取三個,而是從第一個位置取到第三個
alert(box3);
splice中的刪除功能:
var box = ['journey' , 23 , '江蘇']; //當(dāng)前數(shù)組
var box2 = box.splice(0,2); //截取前兩個元素這里表示從第0的位置取兩個元素
alert(box2); //返回截取的元素
alert(box); //當(dāng)前數(shù)組被截取的元素被刪除
splice中的插入功能:
var box = ['journey' , 23 , '江蘇']; //當(dāng)前數(shù)組
var box2 = box.splice(1,0,'計算機(jī)編程','江蘇'); //沒有截取,但插入了兩條
alert(box2); //在第2個位置插入兩條
alert(box); //輸出數(shù)組
splice中的替換功能
var box = ['journey' , 23 , '江蘇']; //當(dāng)前數(shù)組
var box2 = box.splice(1,1,100); //截取了第2條,替換成100
alert(box2); //輸出截取的28
alert(box); //輸出數(shù)組
轉(zhuǎn)載于:https://www.cnblogs.com/journey-IT/p/5260193.html
總結(jié)
- 上一篇: 视频编解码:第一章 编解码基础
- 下一篇: SharePoint 2013 本地开发