Object類型
- 創(chuàng)建object實(shí)例方式一:使用new操作符跟Object構(gòu)造函數(shù)
var person = new Object();
person.name = "Nicholas";
person.age = 29;
- 創(chuàng)建object實(shí)例方式二:使用對象字面量表示法(不會(huì)調(diào)用Object構(gòu)造函數(shù))
var person = {
name : "Nicholas",
age: 29
}
var person1 = {
name : "Nicholas",
age: 29,
5 : true
}
//* 使用對象字面量表示法徐绑,屬性名也可以用字符串。
//* 上面數(shù)值屬性名5會(huì)自動(dòng)轉(zhuǎn)換為字符串莫辨。
//* 用person={} ==> new Object()
- 函數(shù)傳參(需要多個(gè)可選參數(shù)時(shí))傲茄,最好做法是:對必須值使用命名參數(shù),用對象字面量來封裝多個(gè)可選參數(shù)沮榜。例子如下:
function dispalyInfo(args){
var output = "";
if(typeof args.name == "string"){
output += "Name: " + args.name + "\n";
}
if (typeof args.age == "number"){
output += "Age: " + args.age+ "\n";
}
alert(output);
}
displayInfo({
name : "Nicholas",
age : 29
});
displayInfo({
name : "Greg"
});
// displayInfo函數(shù)接收一個(gè)args參數(shù)盘榨。
//參數(shù)可能帶有一個(gè)名為name或age屬性,也可能這個(gè)兩個(gè)屬性都有或者沒有蟆融。
Array類型
檢測數(shù)組
使用instanceof
操作符:
if (value instanceof Array){
//對數(shù)組執(zhí)行某些操作
}
ECMAScript5新增加Array.isArray()
方法草巡。這個(gè)方法的目的是最終確定某個(gè)值到底是不是數(shù)組,而不管它是在哪個(gè)全局執(zhí)行環(huán)境中創(chuàng)建的型酥。這個(gè)方法如下:
if(Array.isArray(value)){
//對數(shù)組執(zhí)行某些操作
}
IE9+及以上山憨,其它主流瀏覽器兼容查乒。
轉(zhuǎn)換方法
-
toLocaleString()
方法 -
toString()
方法 -
valueOf()
方法 -
join()
方法、
前三種是所有對象都具有的方法郁竟。方法說明在本系列筆記3有詳細(xì)說明玛迄。其中:調(diào)用數(shù)組的toString
方法會(huì)返回?cái)?shù)組中的每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串。
而調(diào)用valueOf()
返回仍然是數(shù)組棚亩。
var colors = ['red', 'blue', 'green'];
console.log(colors.toString());
console.log(colors.valueOf());
console.log(colors.toLocaleString());
另外
toLocaleString()
方法經(jīng)常會(huì)返回跟toString()
和valueOf()
方法相同的值蓖议。但也不是總?cè)绱恕.?dāng)調(diào)用數(shù)組的 toLocaleString()
方法時(shí)讥蟆,它也會(huì)創(chuàng)建一個(gè)數(shù)組值的以逗號(hào)分割的字符串勒虾。而與前兩個(gè)方法唯一不同的是,這一次為了取得每一項(xiàng)的值瘸彤,調(diào)用的每一項(xiàng)的toLocaleString()方法从撼,而不是toString()方法。如下面例子:
var person1 = {
toLocaleString: function(){
return "Nikolaos";
},
toString: function(){
return "Nicholaos";
}
}
var person2 = {
toLocaleString: function(){
return "Grigorios";
},
toString: function(){
return "Greg";
}
}
var person = [person1,person2];
alert(person); //Nicholaos,Greg
alert(person.toString()); //Nicholaos,Greg
alert(person.toLocaleString());//Nikolaos,Grigorios
說明:由于alert()
要接收字符串參數(shù)钧栖,所以它會(huì)在后臺(tái)調(diào)用toString()方法低零,得到跟直接調(diào)用toString()方法一樣的結(jié)果。
數(shù)組繼承的toLocaleString()拯杠、toString()掏婶、valueOf()方法,在默認(rèn)情況下都會(huì)以逗號(hào)分割的字符串的形式返回?cái)?shù)組項(xiàng)。可以使用join()方法索抓,則可以使用不同的分隔符來構(gòu)建這個(gè)字符串。
join()方法
join() 方法用于把數(shù)組中的所有元素放入一個(gè)字符串老厌。元素是通過指定的分隔符進(jìn)行分隔的。返回:一個(gè)字符串黎炉。
var colors = ['red','blue','green'];
console.log(colors.join(',')); //red,blue,green
console.log(colors.join('||')); //red||blue||green
棧方法(后進(jìn)先出)
棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu)枝秤,也就是最新添加的元素最早被移除。
- ArrayObj.push()方法
- ArrayObj.pop()方法
ArrayObj.push()
:就是向數(shù)組末尾添加新的元素慷嗜,返回的是:數(shù)組新的長度淀弹。
ArrayObj.pop()
:就是向數(shù)組中刪除數(shù)組最后一個(gè)元素并且:返回該元素。如果數(shù)組為空就返回:undefined
庆械。
隊(duì)列方法(先進(jìn)先出)
- ArrayObj.shift()
- ArrayObj.unshift()
ArrayObj.shift()
:方法用于把數(shù)組中的第一個(gè)元素刪除薇溃,并返回:第一個(gè)元素的值。
ArrayObj.unshift()
:該方法可把它的參數(shù)順序添加到數(shù)組的頭部缭乘。它直接修改了數(shù)組沐序,而不是創(chuàng)建一個(gè)新的數(shù)組。返回的:是新數(shù)組的長度。
unshift()在IE6策幼,IE7下邑时,數(shù)據(jù)有添加成功,但返回值卻是undefined垄惧。
重排序方法
-
reverse()
方法 -
sort()
方法
reverse()
方法會(huì)反轉(zhuǎn)數(shù)組項(xiàng)的順序。直接修改了數(shù)組到逊,而不是創(chuàng)建一個(gè)新數(shù)組。
var values = [1, 2, 3, 6, 5];
values.reverse();
alert(values); //5,6,3,2,1
sort()
方法按升序排列數(shù)組——即最小的值位于最前面滤钱,最大的值排在最后面觉壶。為了實(shí)現(xiàn)排序他炊,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法争剿,然后比較得到字符串,以確定如何排序痊末。即使數(shù)組中的每一項(xiàng)都是數(shù)組蚕苇,sort()方法比較的也是字符串,如下所示:
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5
sort()方法可以接受一個(gè)比較函數(shù)作為參數(shù)凿叠,以便我們指定那個(gè)值位于那個(gè)值的前面涩笤。
比較函數(shù)接受兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù)盒件,如果兩個(gè)參數(shù)相等蹬碧,則返回0,如果第一個(gè)參數(shù)位于第二個(gè)之后則返回一個(gè)正數(shù)炒刁。以下就是一個(gè)簡單的比較函數(shù):
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
這個(gè)比較函數(shù)可以使用于大多數(shù)數(shù)據(jù)類型恩沽,只要將其作為參數(shù)傳遞給sort()方法即可,如下面這個(gè)例子所示:
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15
在將比較函數(shù)傳遞到sort()方法之后翔始,數(shù)值仍然保持了正確的升序飒筑。當(dāng)然,也可以通過比較函數(shù)產(chǎn)生降序排序的結(jié)果绽昏,只要交換比較函數(shù)返回的值即可:
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //15,10,5,1,0
reverse()和sort()方法會(huì)返回值是經(jīng)過排序之后的數(shù)組协屡。
對于數(shù)值類型或者其valueOf方法會(huì)返回?cái)?shù)值類型的對象類型,可以使用一個(gè)更簡單的比較函數(shù)全谤。這個(gè)函數(shù)只要用第二個(gè)值減第一個(gè)值即可:
function compare(value1, value2) {
return value2 - value1;
}
由于比較函數(shù)通過返回一個(gè)小于零肤晓、等于零或大于零的值來影響排序結(jié)果,因此減法操作就可以適當(dāng)處理所有情況。
操作方法
- concat()方法
- slice()方法
- splice()方法
concat() 方法用于連接兩個(gè)或多個(gè)數(shù)組补憾。
該方法不會(huì)改變現(xiàn)有的數(shù)組漫萄,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本。
var a = [1,2,3];
console.log(a.concat(4,5)); //[1,2,3,4,5]
console.log(a) //[1,2,3]
//也可以多個(gè)數(shù)組
//arrObj1.concat(arrObj2,arrObj3);
簡介slice()與splice()方法
slice(start,end)方法
start必需盈匾。規(guī)定從何處開始選取腾务。負(fù)數(shù):從數(shù)組尾部開始算起。-1是最后一個(gè)削饵,-2指倒數(shù)第二個(gè)元素岩瘦。
end可選。規(guī)定何處結(jié)束選取窿撬∑裘粒可負(fù)數(shù),同上劈伴。
返回:新數(shù)組密末。包含start到end(不包括在內(nèi))的arrayObj中的元素。
splice() 方法用于插入跛璧、刪除或替換數(shù)組的元素
語法:arrayObj.splice(index, howmany, ele1, ......, eleX)
index 必需严里。規(guī)定從何處添加/刪除元素。
必須數(shù)字追城,是開始插入或刪除的數(shù)組元素下標(biāo)田炭。
howmany必需。規(guī)定刪除多少元素漓柑。必須數(shù)字教硫。可以為"0"辆布。
未規(guī)定時(shí)瞬矩。刪除從index開始到原數(shù)組結(jié)尾的所有元素。
element1 可選锋玲。規(guī)定要添加到數(shù)組的新元素景用。從 index 所指的下標(biāo)處開始插入。
elementX 可選惭蹂∩〔澹可向數(shù)組添加若干元素。
說明:splice()
方法可刪除從 index 處開始的零個(gè)或多個(gè)元素盾碗,并且用參數(shù)列表中聲明的一個(gè)或多個(gè)值來替換那些被刪除的元素媚污。
slice()與splice()方法:
slice(start, end);
slice()方法返回從參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個(gè)參數(shù)廷雅,該方法返回起死和結(jié)束位置之間的項(xiàng)耗美,但不包括結(jié)束位置的項(xiàng)京髓。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2); // green, blue, yellow, purple
console.log(colors3); // green, blue, yellow
splice()有刪除,插入商架,替換的功能
- 刪除 - 需要兩個(gè)參數(shù)堰怨,要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
- 直接修改本數(shù)組蛇摸。返回:刪除元素的數(shù)組备图。
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,2);
console.log(colors); // ["blue"]
console.log(removed); // ["red", "green"]
- 插入 - 需要三個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)
- 直接修改本數(shù)組赶袄。返回:刪除元素的數(shù)組揽涮。
var colors = ["red", "green", "blue"];
var removed = colors.splice(1,0,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
console.log(removed); // 返回空
- 替換 - 需要三個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)弃鸦。
- 直接修改本數(shù)組绞吁。返回:刪除元素的數(shù)組幢痘。
var colors = ["red", "green", "blue"];
var removed = colors.splice(1,1,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "blue"]
console.log(removed); // ["green"]
位置方法
-
indexOf()
方法 -
lastIndexOf()
方法
ECMAScript5為數(shù)組實(shí)例添加了兩個(gè)位置方法:indexOf()
和lastIndexOf()
唬格。這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引。其中indexOf()方法從數(shù)組開頭(位置0)開始向后查找颜说,lastIndexOf()方法則從數(shù)組的末尾開始向前查找购岗。
這兩個(gè)方法都返回查找的項(xiàng)在數(shù)組中的位置,或者沒有查找到的情況下返回-1
门粪。在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí)喊积,會(huì)使用全等操作符;也就是說要求查找的項(xiàng)必須嚴(yán)格相等(就像使用===一樣)玄妈。
var numbers = [1,2,3,4,5,4,3,2,1];
console.log(numbers.indexOf(4));//3
console.log(numbers.lastIndexOf(4));//5
console.log(numbers.indexOf(4,4)); //5
console.log(numbers.lastIndexOf(4,4));//3
var person = {name:'Niccholas'};
var people = [{name:'Niccholas'}];
var morePeople = [person];
console.log(people.indexOf(person));//-1
console.log(morePeople.indexOf(person)); //0