JavaScript引用類型Array實(shí)例分析
本文實(shí)例講述了JavaScript引用類型Array。分享給大家供大家參考,具體如下:
1、ECMAScript數(shù)組的特點(diǎn)
(1)ECMAScript數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù)。
(2)ECMAScript數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的。
2、創(chuàng)建數(shù)組
(1)使用Array構(gòu)造函數(shù)(new操作符可省略)
var arr1 = new Array(); var arr2 = new Array(3); var arr3 = new Array("teacher", 3, true);
(2)使用數(shù)組字面量表示法
var arr1 = []; var arr2 = ["teacher", 3, true];
3、length屬性
ECMAScript數(shù)組的length屬性不是只讀的,通過設(shè)置這個(gè)屬性可以從數(shù)組末尾移除項(xiàng)或向數(shù)組中添加新項(xiàng)。
eg1:從數(shù)組末尾移除項(xiàng)
var arr = ["teacher", 3, true]; arr.length = 1; alert(arr[2]);//undefined
eg2:如果將length設(shè)置為大于當(dāng)前數(shù)組長度的值,則新增的每一項(xiàng)都會(huì)取得undefined值
var arr = ["teacher", 3, true]; arr.length = 4; alert(arr[3]);//undefined
eg3:向數(shù)組中添加新項(xiàng)
var arr = ["teacher", 3, true]; arr[arr.length] = "doctor";
eg4:當(dāng)一個(gè)值放在超出當(dāng)前數(shù)組大小的位置上時(shí),數(shù)組會(huì)重新計(jì)算其長度值,等于最后一項(xiàng)的索引加一。
var arr = ["teacher", 3, true]; arr[9] = "doctor"; alert(arr.length);//10
4、檢測數(shù)組
(1)instanceof
操作符
if (value instanceof Array) { ... }
適用范圍:一個(gè)網(wǎng)頁或一個(gè)全局作用域
問題:若網(wǎng)頁中包含多個(gè)框架,則實(shí)際上存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,從而存在兩個(gè)以上不同版本的Array構(gòu)造函數(shù)。若從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,那么傳入的數(shù)組在與第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。
(2)Array.isArray()
方法
if (Array.isArray(value)) { ... }
用途:確定給定值是否是數(shù)組,無論它是在哪個(gè)全局執(zhí)行環(huán)境中創(chuàng)建的。
5、轉(zhuǎn)換方法
(1)toString()
:返回每一項(xiàng)的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串,為了取得每一項(xiàng)的值,調(diào)用的是每一項(xiàng)的toString()方法。
(2)valueOf()
:返回的還是數(shù)組
(3)toLocaleString()
:為了取得每一項(xiàng)的值,調(diào)用的是每一項(xiàng)的toLocaleString()方法,而不是toString()方法。
(4)join()
:使用指定的分隔符來構(gòu)建字符串
說明:alert()
方法要接收字符串參數(shù),所以它會(huì)在后臺(tái)調(diào)用toString()
方法。
eg1:
var friends = ["Alice","Bruce","Cindy"]; alert(friends.toString());//Alice,Bruce,Cindy alert(friends.valueOf());//Alice,Bruce,Cindy alert(friends.toLocaleString());//Alice,Bruce,Cindy alert(friends);//Alice,Bruce,Cindy alert(friends.join());//Alice,Bruce,Cindy alert(friends.join("|"));//Alice|Bruce|Cindy
eg2:
var person1 = { toLocaleString: function() { return "Alice"; }, toString: function() { return "Bruce"; } } var person2 = { toLocaleString: function() { return "Cindy"; }, toString: function() { return "David"; } } var person = [person1, person2]; alert(person);//Alice,Bruce alert(person.toString());//Alice,Bruce alert(person.toLocaleString());//Cindy,David
6、棧方法
(1)push()
:接收任意數(shù)量的參數(shù),逐個(gè)添加到末尾,返回修改后數(shù)組的長度。
(2)pop()
:從數(shù)組末尾移除最后一項(xiàng),數(shù)組的長度減一,返回移除的項(xiàng)。
var friends = new Array(); var len = friends.push("Alice","Bruce"); alert(len);//2 var friend = friends.pop(); alert(friend );//"Bruce" alert(friends.length);//1
7、隊(duì)列方法
(1)shift()
:移除數(shù)組的第一項(xiàng),數(shù)組的長度減一,返回移除的項(xiàng)。
(2)unshift()
:在數(shù)組前端添加任意數(shù)量的項(xiàng),返回修改后數(shù)組的長度。
var friends = new Array(); var len = friends.unshift("Alice","Bruce"); alert(len);//2 var friend = friends.shift(); alert(friend );//"Alice" alert(friends.length);//1
8、重排序方法
(1)reverse()
:翻轉(zhuǎn)數(shù)組項(xiàng)的順序
(2)sort()
:按升序排列數(shù)組項(xiàng)
sort()
方法會(huì)調(diào)用每項(xiàng)的toString()
方法,然后比較得到的字符串。
var items=[0,1,3,15,18]; items.sort(); alert(items);//0,1,15,18,3
sort()
方法可以接收一個(gè)比較函數(shù)作為參數(shù):比較函數(shù)接收兩個(gè)參數(shù),若第一個(gè)參數(shù)應(yīng)該位于第二個(gè)參數(shù)之前則返回一個(gè)負(fù)數(shù);若兩個(gè)參數(shù)相等則返回0;若第一個(gè)參數(shù)應(yīng)該位于第二個(gè)參數(shù)之后則返回一個(gè)正數(shù)。
function compare(item1, item2) { if (item1 < item2) return -1; else if (item1 > item2) return 1; else return 0; } var items=[0,1,3,15,18]; items.sort(compare); alert(items);//0,1,3,15,18
對于數(shù)值類型或其valueOf()
方法會(huì)返回?cái)?shù)值類型的對象類型,可以簡寫比較函數(shù)。
function compare(item1, item2) { return item1 - item2; }
9、操作方法
(1)concat()
:基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組。先創(chuàng)建當(dāng)前數(shù)組的一個(gè)副本,然后將接收到的參數(shù)添加到這個(gè)副本的末尾,最后返回新構(gòu)建的數(shù)組。若沒有給concat()
傳遞參數(shù),則只是復(fù)制當(dāng)前數(shù)組并返回副本;若傳遞給concat()
的是一或多個(gè)數(shù)組,則該方法會(huì)將這些數(shù)組中的每一項(xiàng)都添加到結(jié)果數(shù)組;若傳遞給concat()
的不是數(shù)組,則這些值都簡單地添加到結(jié)果數(shù)組的末尾。
var friends = ["Alice", "Bruce"]; var newFriends = friends.concat("Cindy", ["David", "Emy"]); alert(newFriends);//Alice,Bruce,Cindy,David,Emy
(2)slice()
:基于當(dāng)前數(shù)組的一或多項(xiàng)創(chuàng)建一個(gè)新數(shù)組。接收一或兩個(gè)參數(shù),即要返回項(xiàng)的開始和結(jié)束位置(不包括結(jié)束位置)。slice()
方法不會(huì)影響原始數(shù)組。若參數(shù)中有負(fù)數(shù),則用數(shù)組長度加上該負(fù)數(shù)來確定相應(yīng)的位置。若結(jié)束位置小于開始位置,則返回空數(shù)組。
var friends = ["Alice", "Bruce", "Cindy"]; var friends1 = friends.slice(1); alert(friends1);//Bruce,Cindy var friends2 = friends.slice(1, 2); alert(friends2);//Bruce
(3)splice()
:主要用途是向數(shù)組的中部插入項(xiàng),返回一個(gè)包含從原始數(shù)組中刪除的項(xiàng)的數(shù)組,若沒有刪除任何項(xiàng),則返回空數(shù)組。使用方式有3種:
1)刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
2)插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需指定3個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入任意數(shù)量的項(xiàng)。
3)替換:可以向指定位置插入任意數(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ù)相等。
var friends = ["Alice", "Bruce", "Cindy"]; var friends1 = friends.splice(0, 1); alert(friends1);//Bruce,Cindy var friends2 = friends.slice(1, 0, "David", "Emy"); alert(friends2);//Bruce,David,Emy,Cindy var friends3 = friends.slice(1, 1, "Fancy", "Gary"); alert(friends3);//Bruce,Fancy,Gary,Emy,Cindy
10、位置方法
(1)indexOf()
:接收兩個(gè)參數(shù)——要查找的項(xiàng)和可選的查找起點(diǎn)位置的索引,從開頭開始查找,沒找到則返回-1。
(2)lastIndexOf()
:接收兩個(gè)參數(shù)——要查找的項(xiàng)和可選的查找起點(diǎn)位置的索引,從末尾開始查找,沒找到則返回-1。
在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),會(huì)使用全等操作符,也就是要求查找的項(xiàng)必須嚴(yán)格相等。
var person = {name : "Alice"}; var people1 = [{name : "Alice"}, person]; alert(people1.indexOf(person));//1,不是0
11、迭代方法
ECMAScript數(shù)組有5個(gè)迭代方法。每個(gè)方法接收兩個(gè)參數(shù)——要在每一項(xiàng)上運(yùn)行的函數(shù)和可選的運(yùn)行該函數(shù)的作用域?qū)ο螅ㄓ绊憈his的值)。傳入的函數(shù)接收三個(gè)參數(shù)——數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對象本身。
(1)every()
:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),若該函數(shù)對每一項(xiàng)都返回true,則返回true。
(2)some()
:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組。
(3)filter()
:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),若該函數(shù)對每一項(xiàng)都返回true,則返回true。
(4)foreach()
:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),無返回值。
(5)map()
:對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),若該函數(shù)對每一項(xiàng)都返回true,則返回true。
var nums = [1,2,3,4,1,2,3]; var every = nums.every(function(item, index, array) { return (item > 2); }); alert(every);//false var some = nums.some(function(item, index, array) { return (item > 2); }); alert(some);//true var filter = nums.filter(function(item, index, array) { return (item > 2); }); alert(filter);//[3,4,3] var map = nums.map(function(item, index, array) { return (item * 2); }); alert(map);//[2,4,6,8,2,4,6] nums.foreach(function(item, index, array) { ... });
12、歸并方法
迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。接收兩個(gè)參數(shù)——一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和可選的作為歸并基礎(chǔ)的值。傳入的函數(shù)接收四個(gè)參數(shù)——前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對象。函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。
(1)reduce()
:從數(shù)組的第一項(xiàng)開始,逐個(gè)遍歷到最后。
var items = [1,2,3,4]; var sum = items.reduce(function(prev, cur, index, array) { return prev + cur; }); alert(sum);//10
(2)reduceRight()
:接收兩個(gè)參數(shù)——一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和可選的作為歸并基礎(chǔ)的值。從數(shù)組的最后一項(xiàng)開始,向前遍歷到第一項(xiàng)。
var items = [1,2,3,4]; var sum = items.reduceRight(function(prev, cur, index, array) { return prev + cur; }); alert(sum);//10
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript操作DOM技巧總結(jié)》及《JavaScript字符與字符串操作技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
ajax跨域調(diào)用webservice的實(shí)現(xiàn)代碼
這篇文章主要介紹了 ajax跨域調(diào)用webservice服務(wù)例子和理解,最近ajax訪問webservice遇到跨域的問題,網(wǎng)上搜索資料,總結(jié)如下2016-05-05javascript中onmouse事件在div中失效問題的解決方法
我們預(yù)期只有當(dāng)鼠標(biāo)從div中移開的時(shí)候才會(huì)觸發(fā)onmouseout事件,可事實(shí)上,當(dāng)我們移到div中的元素時(shí),例如:本例中的a標(biāo)簽時(shí),就會(huì)觸發(fā) onmousout事件2012-01-01javascript函數(shù)定義的幾種區(qū)別小結(jié)
本篇文章主要是對javascript函數(shù)定義的幾種區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01JAVASCRIPT實(shí)現(xiàn)的WEB頁面跳轉(zhuǎn)以及頁面間傳值方法
在WEB頁面中,我們實(shí)現(xiàn)頁面跳轉(zhuǎn)的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用戶點(diǎn)擊某處,然后直接由瀏覽器幫我們跳轉(zhuǎn)。2010-05-05js實(shí)現(xiàn)iframe跨頁面調(diào)用函數(shù)的方法
這篇文章主要介紹了js實(shí)現(xiàn)iframe跨頁面調(diào)用函數(shù)的方法,實(shí)例展示了iframe中父頁面調(diào)用子頁面和子頁面調(diào)用父頁面的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12使用JS操作文件(FileReader讀取--node的fs)
這篇文章主要介紹了使用JS操作文件(FileReader讀取--node的fs),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12ionic+html5+API實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用
這篇文章主要為大家詳細(xì)介紹了ionic+html5+API實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09JavaScript在多瀏覽器下for循環(huán)的使用方法
JavaScript語言在不同的瀏覽器的下有存在細(xì)微的差異,但不像DOM操作差異那么大,現(xiàn)在為大家列舉出其中一個(gè)"for循環(huán)"的差異,并介紹如何有效的解決這種差異2012-11-11