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