摘要:例如,會(huì)刪除數(shù)組中的前兩項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等。這兩個(gè)方法都接收兩個(gè)參數(shù)要查找的項(xiàng)和可選的表示查找起點(diǎn)位置的索引。對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
除Object類(lèi)型外,Array是最常用的類(lèi)型,Array對(duì)象與其他語(yǔ)言相比有著自己的不同之處,首先同一數(shù)組對(duì)象的不同項(xiàng)可以保存不同類(lèi)型的數(shù)據(jù),其次數(shù)組對(duì)象的長(zhǎng)短可以動(dòng)態(tài)改變.
創(chuàng)建方式創(chuàng)建Array對(duì)象的方式有兩種
Array構(gòu)造函數(shù).
數(shù)組對(duì)象字面量
//Array構(gòu)造函數(shù) var colors = new Array(); var colors = new Array(20); var colors = new Array("red","black","blue"); //數(shù)組對(duì)象字面量 var colors =["red","blue","black"]; var name =[]; var values = [1,2,];
由于IE8及之前版本中的ECMAScript實(shí)現(xiàn)在數(shù)組字面量方面存在bug,上述代碼中values的長(zhǎng)度為3,其他瀏覽器中value的長(zhǎng)度為2.為了兼容,我們應(yīng)避免在最數(shù)組的最后一下中添加,
讀取方式讀取和設(shè)置數(shù)組的值時(shí),使用方括號(hào)并提供相應(yīng)值的基于0 的數(shù)字索引
var colors = ["red", "blue", "green"]; // 定義一個(gè)字符串?dāng)?shù)組 alert(colors[0]); // 顯示第一項(xiàng) colors[2] = "black"; // 修改第三項(xiàng) colors[3] = "brown"; // 新增第四項(xiàng)
數(shù)組對(duì)象有一個(gè)length屬性表示數(shù)組對(duì)象的長(zhǎng)度,通過(guò)修改這個(gè)屬性的值可以改變數(shù)組的長(zhǎng)度
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含3 個(gè)字符串的數(shù)組 var names = []; // 創(chuàng)建一個(gè)空數(shù)組 alert(colors.length); //3 alert(names.length); //0 colors.length = 2; alert(colors[2]); //undefined
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含3 個(gè)字符串的數(shù)組 colors[colors.length] = "black"; //(在位置3)添加一種顏色 colors[colors.length] = "brown"; //(在位置4)再添加一種顏色 colors[99] = "black"; // (在位置 99)添加一種顏色 alert(colors.length); // 100
tip:數(shù)組最多可以包含4 294 967 295 個(gè)項(xiàng).
數(shù)組操作 數(shù)組檢測(cè)function isArray(value){ return Object.prototype.toString.call(value) == "[object Array]"; }
ECMAScript 5 新增了Array.isArray()方法,支持 Array.isArray()方法的瀏覽器有IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome。
轉(zhuǎn)換方法數(shù)組的轉(zhuǎn)換方法有:toString() toLoacalString() valueOf() join()
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含3 個(gè)字符串的數(shù)組 alert(colors.toString()); // red,blue,green alert(colors.valueOf()); // red,blue,green alert(colors); // red,blue,green alert(colors.join(",")); //red,green,blue alert(colors.join("||")); //red||green||blue
tip:如果不給join()方法傳入任何值,或者給它傳入undefined,則使用逗號(hào)作為分隔符。IE7 及更早版本會(huì)錯(cuò)誤的使用字符串"undefined"作為分隔符
棧方法棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),也就是新添加的項(xiàng)最早被移除.
push():向數(shù)組末尾添加項(xiàng).
pop():從數(shù)組末尾移除項(xiàng).
var colors = new Array(); var count = colors.push("red","green"); //推入兩項(xiàng) alert(count); //2 count = colors.push("black"); //推入一項(xiàng) alert(count); //3 var item = colors.pop(); //移除一項(xiàng) alert(item); //black alert(colors.length); //2隊(duì)列方法
隊(duì)列是一種FIFO(First-In-First-Out,先進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),也就是最先添加的項(xiàng)最早被移除
"shift()":從數(shù)組頭部移除項(xiàng).
unshift():向數(shù)組頭部添加項(xiàng).
var colors = ["black","red","blue"]; var item = colors.shift(); //移除第一項(xiàng)并返回 var count = colors.unshift("pink"); //在頭部添加一項(xiàng)并返回?cái)?shù)組長(zhǎng)度
tip:IE7 及更早版本對(duì)JavaScript 的實(shí)現(xiàn)中存在一個(gè)偏差,其unshift()方法總是返 回undefined 而不是數(shù)組的新長(zhǎng)度
重排序方法sort(): 在默認(rèn)情況下,sort()方法按升序排列數(shù)組項(xiàng)——即最小的值位于最前面,最大的值排在最后面。為了實(shí)現(xiàn)排序,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到的字符串,以確定如何排序。即使數(shù)組中的每一項(xiàng)都是數(shù)值,sort()`方法比較的也是字符串
reverse(): 反轉(zhuǎn)數(shù)組項(xiàng)的順序.
var arr = [1,48,230,12]; arr.sort(); // [1, 12, 230, 48]
sort()方法可以接收一個(gè)比較函數(shù)作為參數(shù),以便我們指定哪個(gè)值位于哪個(gè)值的前面。比較函數(shù)接收兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等則返回0,如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之后則返回一個(gè)正數(shù)
function compare(value1,value2){ if(value1 > value2){ return 1; } else if(value1 < value2) { return -1; } else { return 0; } } var arr = [1,48,230,12]; arr.sort(); // [1, 12, 48, 230]
對(duì)于數(shù)值類(lèi)型或者其 valueOf()方法會(huì)返回?cái)?shù)值類(lèi)型的對(duì)象類(lèi)型,可以使用一個(gè)更簡(jiǎn)單的比較函數(shù)。這個(gè)函數(shù)只要用第二個(gè)值減第一個(gè)值即可
function compare(value1, value2){ return value2 - value1; }操作方法
concat(): 數(shù)組拼接,并返回拼接后的結(jié)果.
slice() : slice()方法可以接受一或兩個(gè)參數(shù),即要返回項(xiàng)的起始和結(jié)束位置。在只有一個(gè)參數(shù)的情況下,slice()
方法返回從該參數(shù)指定位置開(kāi)始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個(gè)參數(shù),該方法返回起始和結(jié)束位置之間的項(xiàng)——但不包括結(jié)束位置的項(xiàng)
splice():此方法有三個(gè)用途.
刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2 個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。例如,splice(0,2)會(huì)刪除數(shù)組中的前兩項(xiàng)。
插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需提供3 個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)。如果要插入多個(gè)項(xiàng),可以再傳入第四、第五,以至任意多個(gè)項(xiàng)。例如,splice(2,0,"red","green")會(huì)從當(dāng)前數(shù)組的位置2 開(kāi)始插入字符串"red"和"green"。
替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需指定3 個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等。例如,splice (2,1,"red","green")會(huì)刪除當(dāng)前數(shù)組位置2 的項(xiàng),然后再?gòu)奈恢? 開(kāi)始插入字符串"red"和"green"
tip:如果 slice()方法的參數(shù)中有一個(gè)負(fù)數(shù),則用數(shù)組長(zhǎng)度加上該數(shù)來(lái)確定相應(yīng)的位置。
//concat() var arr = ["red","black","blue"]; var result = arr.concat(); // ["red","black","blue"] var result1 = arr.concat(["yellow","pink"]); // ["red","black","blue","yellow","pink"] var result2 - arr.concat("white",["yellow","pink"]); // ["red","black","blue","white","yellow","pink"]
//slice() var colors = ["red", "green", "blue", "yellow", "purple"]; var colors2 = colors.slice(1); var colors3 = colors.slice(1,4); alert(colors2); //green,blue,yellow,purple alert(colors3); //green,blue,yellow
//splice() var colors = ["red", "green", "blue"]; var removed = colors.splice(0,1); // 刪除第一項(xiàng) console.log(colors); // ["green","blue"] console.log(removed); // ["red"] 返回的數(shù)組中只包含一項(xiàng) removed = colors.splice(1, 0, "yellow", "orange"); // 從位置1 開(kāi)始插入兩項(xiàng) console.log(colors); // [`green`,`yellow`,`orange`,`blue`] console.log(removed); // 返回的是一個(gè)空數(shù)組 removed = colors.splice(1, 1, "red", "purple"); // 插入兩項(xiàng),刪除一項(xiàng) console.log(colors); // [`green`,`red`,`purple`,`orange`,`blue`] console.log(removed); // ["yellow"] 返回的數(shù)組中只包含一項(xiàng)位置方法
ECMAScript 5 為數(shù)組實(shí)例添加了兩個(gè)位置方法:indexOf()和lastIndexOf()。這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引。其中,indexOf()方法從數(shù)組的開(kāi)頭(位0)開(kāi)始向后查找,lastIndexOf()方法則從數(shù)組的末尾開(kāi)始向前查找.這兩個(gè)方法都返回要查找的項(xiàng)在數(shù)組中的位置,或者在沒(méi)找到的情況下返回-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 var person = { name: "Nicholas" }; var people = [{ name: "Nicholas" }]; var morePeople = [person]; alert(people.indexOf(person)); //-1 alert(morePeople.indexOf(person)); //0
支持它們的瀏覽器包括IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome。
迭代方法ECMAScript 5 為數(shù)組定義了5 個(gè)迭代方法。每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο蟆绊?b>this的值。傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身。根據(jù)使用的方法不同,這個(gè)函數(shù)執(zhí)行后的返回值可能會(huì)也可能不會(huì)影響方法的返回值。以下是這5 個(gè)迭代方法的作用。
every():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true
fiter(): 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true 的項(xiàng)組成的數(shù)組。
forEach():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。這個(gè)方法沒(méi)有返回值。
map():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
some():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true。
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
這幾個(gè)方法都類(lèi)似,只是返回值不一樣,支持這些迭代方法的瀏覽器有IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome。
歸并方法ECMAScript 5 還新增了兩個(gè)歸并數(shù)組的方法:reduce()和reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。其中,reduce()方法從數(shù)組的第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后。而reduceRight()則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng).
這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。傳給 reduce()和reduceRight()的函數(shù)接收4 個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)。
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); console.log(sum); //15 var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev, cur, index, array){ return prev + cur; }); alert(sum); //15
支持這兩個(gè)歸并函數(shù)的瀏覽器有IE9+、Firefox 3+、Safari 4+、Opera 10.5 和Chrome。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86223.html
摘要:對(duì)象構(gòu)造函數(shù)的判斷用法的每個(gè)實(shí)例都有構(gòu)造函數(shù),用于保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)如上所示,的實(shí)例的跟對(duì)象是相等的那么我們就可以用此來(lái)判斷數(shù)組了原型鏈上的用法屬性表示構(gòu)造函數(shù)的原型其中有一個(gè)方法是用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。 在JS中,數(shù)組是屬于Object類(lèi)型的,也就是屬于引用類(lèi)型(引用類(lèi)型存放在堆內(nèi)存中,在棧內(nèi)存會(huì)有一個(gè)或者多個(gè)地址來(lái)指向這個(gè)堆內(nèi)存)。 所以對(duì)于引用...
摘要:構(gòu)造函數(shù)用于創(chuàng)建對(duì)象的函數(shù)。例為構(gòu)造函數(shù),為新對(duì)象提供默認(rèn)屬性與方法。方法一可以省略方法二數(shù)組字面量與對(duì)象一樣,字面量不會(huì)調(diào)用構(gòu)造函數(shù)。類(lèi)型基本類(lèi)型引用類(lèi)型建議永不要使用對(duì)象類(lèi)型方法按照指定方法返回?cái)?shù)值的字符串表示。 概念 : 引用類(lèi)型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起,也就是 類(lèi);對(duì)象為特殊的引用類(lèi)型實(shí)例。新對(duì)象由new后加一個(gè)構(gòu)造函數(shù)創(chuàng)建的。構(gòu)造函數(shù):用于創(chuàng)建對(duì)象的函數(shù)。例...
摘要:也就是說(shuō)當(dāng)使用后,當(dāng)前執(zhí)行上下文中的對(duì)象已被替換為,后續(xù)執(zhí)行將以所持有的狀態(tài)屬性繼續(xù)執(zhí)行。借用的方法替換的實(shí)例去調(diào)用相應(yīng)的方法。實(shí)現(xiàn)引用類(lèi)型的繼承其實(shí)沒(méi)有類(lèi)這一概念,我們平時(shí)使用的等嚴(yán)格來(lái)說(shuō)被稱(chēng)作引用類(lèi)型。 call 方法:object.method.call(targetObj[, argv1, argv2, .....]) apply 方法:object.method.apply(...
摘要:原型對(duì)象內(nèi)部也有一個(gè)指針屬性指向構(gòu)造函數(shù)實(shí)例可以訪(fǎng)問(wèn)原型對(duì)象上定義的屬性和方法。在創(chuàng)建子類(lèi)型的實(shí)例時(shí),不能向超類(lèi)型的構(gòu)造函數(shù)中傳遞參數(shù)。 贊助我以寫(xiě)出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 私有變量和函數(shù) 在函數(shù)內(nèi)部定義的變量和函數(shù),如果不對(duì)外提供接口,外部是無(wú)法訪(fǎng)問(wèn)到的,也就是該函數(shù)的私有的變量和函數(shù)。 function ...
摘要:看下面一個(gè)例子優(yōu)點(diǎn)使用構(gòu)造器函數(shù)的好處在于,它可以在創(chuàng)建對(duì)象時(shí)接收一些參數(shù)。按照慣例,構(gòu)造函數(shù)的函數(shù)名應(yīng)始終以一個(gè)大寫(xiě)字母開(kāi)頭,以區(qū)分普通函數(shù)。返回該對(duì)象的源代碼。使您有能力向?qū)ο筇砑訉傩院头椒ā? 基本概念 ECMA關(guān)于對(duì)象的定義是:無(wú)序?qū)傩缘募希鋵傩钥梢园局怠?duì)象或者函數(shù)。對(duì)象的每個(gè)屬性或方法都有一個(gè)名字,而每個(gè)名字都映射到一個(gè)值。 類(lèi) 在現(xiàn)實(shí)生活中,相似的對(duì)象之間往往都有...
閱讀 2852·2023-04-25 17:59
閱讀 682·2023-04-25 15:05
閱讀 673·2021-11-25 09:43
閱讀 3034·2021-10-12 10:13
閱讀 3537·2021-09-27 13:59
閱讀 3583·2021-09-23 11:21
閱讀 3879·2021-09-08 09:35
閱讀 566·2019-08-29 17:12