引用類型
object
一般來說,對象屬性訪問都是點表示法,方括號語法也有自己的獨到之處。例如:
var person = new Object();
person.name = "Nicholas";
alert(person["name"]); //"Nicholas"
alert(person.name); //"Nicholas"
從功能上看,這兩種訪問對象屬性的方法沒有任何區別。但方括號語法的主要優點是可以通過變量來訪問屬性,例如:
var propertyName = "name";
alert("person[propertyName]"); //"Nicholas"
如果屬性名中包含導致語法錯誤的字符,或者屬性名使用的是關鍵字或者保留字,也可以使用方括號表示法。例如:
person["first name"] = "Nicholas";
數組
在數組最后添加一項:
var colors = ["red","blue","green"]; //創建一個包含3個字符串的數組
colors[colors.length] = "black"; //(在位置3)添加一種顏色
alert("colors.length"); //4
轉換方法
toString()方法和toLocaleString()方法返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。而valueOf()返回的還是數組。
alert("colors.toString()"); //red,blue,green
alert("colors.toLocaleString()"); //red,blue,green
alert("colors.valueOf()"); //red,blue,green
而join()方法可以使用不同的分隔符來構建字符串。join()方法只接受一個參數,jizuowei分隔符的字符串。例:
alert("colors.join(",")); //red,blue,green
alert("colors.join("||")); //red||blue||green
棧方法
LIFO(后進先出)的數組插入和移除數據的方法,插入移除都發生在棧的頂部,push()方法可以接受任意數量的參數,逐個添加到數組末尾。pop()方法從數組末尾移除一項并返回移除的數據。
var colors = ["red","blue"]; //創建數組
colors.push("brown"); //使用push()方法添加一項
colors[3] = "black"; //添加一項
alert(colors.length); //4
var item = colors.pop(); //取得最后一項
alert(item); //"black"
隊列方法
FIFO(先進先出)shift()方法移除數組第一項并返回該項。unshift()方法與shift()方法相反,可以在數組前端添加任意項,在IE8及更高版本瀏覽器返回新數組長度。例:
var count = colors.unshift("white","green"); //在數組前面推入兩項
alert(count); //5
count = colors.unshift("black"); //推入另一項
alert(count); //6
var item = colors.pop(); //取得最后一項
alert(item); //"brown"
alert(colors.length); //5
push() 數組末尾添加參數
pop() 數組末尾移除一項并返回
shift() 移除數組第一項并返回
unshift() 數組前端添加參數
重排序方法
reverse()方法,直接顛倒數組順序,sort()方法按升序排列數組項,但是比較的是字符串而非數值。所以在使用sort()方法時,還需進行函數比較。
var values = [3,2,1,4,5];
values.reverse();
alert(values); //5,4,1,2,3
values.sort(function(a,b){
return b-a;
})
操作方法
contact()方法創建當前數組的一個副本,然后將接收到的參數添加到副本的末尾。例:
var colors = ["red","green","blue"];
var colors2 = contact("yellow",["black","brown"]);
alert(colors); //red,green,blue
alert(color2); //red,green,blue,yellow,black,brown
slice()方法返回從參數指定位置到當前數組末尾或者第二個參數的所有項。
var colors3 = colors.slice(1); //green
var colors4 = colors.slice(1,2); //green,blue
splice
1.刪除:splice(0,2) 刪除數組前兩項
2.插入:splice(2,0,"red","green")從位置2即第三個字符開始刪除0個項,并插入字符串"red"和"green"。
3.替換:splice(2,1,"red","green")刪除第二項并插入字符串"red"和"green"。
位置方法
indexOf(a,b),從位置b開始查找參數a
lastIndexOf(a,b)從位置b開始向前查找參數a
這兩種方法都是使用全等(===)方法進行匹配,若找不到匹配項,則返回-1。
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4,4)); //5
alert(numbers.lastIndexOf(4,4)); //3
alert(numbers.indexOf(8)); //-1
迭代方法
每個迭代方法接收兩個參數:要在每一項上運行的函數和(可選的)運行該函數的作用域對象————影響this的值。傳入這些方法的函數接收三個參數:數組項的值、該項在數組中的位置和數組對象本身。
every():對數組的每一項運行給定函數,如果該函數對每一項都返回true,則返回true。
filter():返回該函數會返回true的項組成的數組。
forEach():這個方法沒有返回值
map():返回函數每次調用的結果組成的數組
some():如果該函數對任一項返回true,則返回true
IE9以上瀏覽器支持
以上方法都不會修改數組中包含的值。 例:
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,array){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item,index,array){
return (item > 2);
});
alert(someResult); //true
var filterResult = numbers.filter(function(item,index,array){
return(item > 2);
});
alert(filterResult); //[3,4,5,4,3]
var mapResult = numbers.map(function(item,index,array){
return item * 2;
})
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
numbers.forEach(function(item,index,array){
//執行某些操作
})
歸并方法
reduce()和reduceRight()方法接收兩個參數,一個在每一項上調用的函數和(可選的)作為歸并基礎的初始值。傳給方法的函數接收四個參數,前一個值,當前值,項的索引和數組對象。IE9以上瀏覽器支持。例:
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev,cur,index,array){
return prev + cur;
});
alert(sum); //15
reduce()和reduceRight()主要區別在于從哪頭開始遍歷數組。除此之外,沒有任何區別。