Object
1.建立Object執行個體的方式有兩種:
var person=new Object();person.name="zx";person.age=19;
對象字面量標記法:
var person={ name:"zx", age:19};
住意每兩個屬性中間用逗號分隔,最後一個屬性後面沒有逗號,結尾要加分號。
2.訪問對象屬性時,可以使用點標記法,也可以使用方括弧標記法。在使用後者時,要注意屬性要放在引號內。
使用方括弧標記法的優點是:可以通過變數訪問屬性,或屬性名稱中含有空格等字元。 Array
ECMAscript數組的每一項都可以儲存任何類型的資料,且其大小是動態調整的。
幾種構造方式:
var arr=new Array();var arr=new Array(10);var arr=new Array("red","black","white");//數組字面量標記法var arr=[];var arr=["red","black","white"];
通過length屬性可以得到數組的當前長度:
var arr=["red","black","white"];arr[arr.length]="pink";arr.length=2;alert(arr[2])//undefinedarr[99]=19;alert(arr.length);//100
1.檢測數組
使用instanceof的問題在於,它假定只有一個全域環境。可以用如下方法檢測數組:
if(Array.isArray(value)){ dosomething();}
2.轉換方法
toString()、toLocaleString()、valueOf()。
調用數組的toString方法會返回一個由數組中每個值的字串形式拼接而成的以逗號分隔的字串,這個方法實際上會調用每一項的toString方法。調用toLocaleString方法類似,區別在於它會調用每一項的toLocaleString方法。調用valueOf方法返回的還是數組。
var arr=["red","black","white"];alert(arr.toString());//"red,black,white"
join()可以接受一個參數,將其作為分隔字元:
var arr=["red","black","white"];alert(arr.join("&"));//"red&blck&white"
3.棧方法
push()可以接受任意數量的參數,將它們添加到數組的末尾,並返回數組的長度。
pop()則移除數組的最後一項,並返回移除的項。
var arr=["red"];arr.push("black","white");alert(arr.length);//3var item=arr.pop();alert(item);//"white"
4.隊列方法
shift()能夠移除數組中的第一個項並返回。
unshift()能夠在數組前端添加任意個項並返回長度。
結合使用shift()和push()可以類比隊列;
結合使用unshift()和pop()可以類比反向隊列。
var arr=["red"];alert(arr.unshift("black","white"));//"black,white,red"alert(arr.shift());//"white,red"
5.重排序方法
一個是reverse()。
var arr=[1,2,3,4,5];arr.reverse();alert(arr);//[5,4,3,2,1]
另一個是sort()。它接受一個比較函數,用以指定定序。
比較函數接受兩個參數,如果第一個參數應在第二個參數之前則返回一個負數,如果相等則返回0,如果第一個參數應在第二個參數後則返回一個正數:
function compare(value1,value2){ if(value1<value2){ return -1; }else if(value1==value2){ return 0; }else return 1;}var arr=[1,9,2,7,3];arr.sort(compare);alert(arr);//[1,2,3,7,9]
如果是數值型數組的話,還可以簡化:
function compare(value1,value2){ return (value1-value2);}
6.操作方法
第一個是concat()。
var arr=["red"];arr.concat("black","white");alert(arr);//["red","black","white"]
第二個是slice()。接受一個參數時,返回數組中從該項開始到結束的所有項;接受兩個參數時,返回數組中位於這兩項之間的所有項,但不包括結束位置的項。該方法不會影響原始數組。
var arr=[1,2,3,4,5,6];alert(arr.slice(2));//[3,4,5,6]alert(arr.slice(2,4));//[3,4]
第三個是splice()。接受兩個參數時,第一個參數表示起始位置,第二個參數表示要刪除的數目。接受兩個以上參數時,第一個表示起始位置,第二個表示要刪除的個數,後面的表示要插入的項(⊙﹏⊙)b
var arr=[1,2,3,4,5,6];arr.splice(1,3);alert(arr);//[1,5,6]arr=[1,2,3,4,5,6];arr.splice(1,0,6,6,6);alert(arr);//[1,6,6,6,2,3,4,5,6]arr=[1,2,3,4,5,6];arr.splice(1,2,6,6,6);alert(arr);//[1,6,6,6,4,5,6]
7.位置方法
有兩個:indexOf()和lastIndexOf()。接受兩個參數:要尋找的項和(可選的)尋找起點。顯然,第一個從頭開始找,第二個從尾開始找。要注意的是,在尋找時用的是嚴格相等(===)。
var arr=[1,2,3,4,5,4,3,2,1];alert(arr.indexOf(4));//3alert(arr.lastIndexOf(4));//5alert(arr.indexOf(4,4));//5alert(arr.lastIndexOf(4,4));//3alert(arr.indexOf(10));//-1
8.迭代方法
第一個:every()。接受兩個參數:要在每一項上啟動並執行函數和(可選的)運行該函數的範圍對象。給定的函數接受三個參數:數組項的值,該項在數組中的位置和數組對象本身。該方法對數組中的每一項運行給定函數,如果每一項都返回true,則返回true:
var arr=[1,2,3,4,5,6,7];var reslut=arr.every(function(item,index,array){ return (item>2);});alert(result);//false
第二個:some()。和every()類似,區別在於只要有一項返回true,結果就返回true。
var arr=[1,2,3,4,5,6,7];var reslut=arr.some(function(item,index,array){ return (item>2);});alert(result);//true
第三個:filter()。該方法會返回一個數組,該數組由那些函數傳回值為true的項組成。
var arr=[1,2,3,4,5,6,7];var reslut=arr.filter(function(item,index,array){ return (item>2);});alert(result);//[3,4,5,6,7]
第四個:map()。該方法返回一個數組,該數組由每一項運行函數後的結果組成。
var arr=[1,2,3,4,5,6,7];var reslut=arr.map(function(item,index,array){ return (item*2);});alert(result);//[2,4,6,8,10,12,14]
第五個是:forEach()。該方法沒有傳回值,只是對每一項運行函數而已。
9.歸併方法
有兩個:reduce()和reduceRight()。該方法會迭代數組的所有項,然後返回一個最終值。前者從頭開始,後者從尾開始。接受兩個參數:在每一項上啟動並執行函數和(可選的)作為歸併基礎的初始值。函數接受4個參數:前一個值、當前值、項的索引和數組對象。函數的傳回值會作為第一個參數傳給下一項。
var arr=[1,2,3,4,5];var result=arr.reduce(function(prev,cur,index,array){ return (prev+cur);});alert(result);//15