摘要:數(shù)組是數(shù)據(jù)的有序列表,與其他語言不同的是,數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù)。如下的代碼創(chuàng)建的就是一個(gè)密集數(shù)組稀疏數(shù)組與密集數(shù)組相反,并不強(qiáng)制要求數(shù)組元素是緊密相連的,即允許間隙的存在。
數(shù)組是數(shù)據(jù)的有序列表,與其他語言不同的是,ECMAScript 數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù)。也就是說,可以用數(shù)組的第一個(gè)位置來保存字符串,用第二位置來保存數(shù)值,用第三個(gè)位置來保存對象, 以此類推
牢記:
創(chuàng)建數(shù)組JavaScript中的數(shù)組并不像我們在C或java等語言中遇到的常規(guī)數(shù)組,在js中數(shù)組并不是起始地址+長度構(gòu)成的一片連續(xù)的地址空間。
javascript中數(shù)組其實(shí)就是個(gè)對象,只不過會(huì)自動(dòng)管理一些"數(shù)字"屬性和length屬性罷了。
說的更直接一點(diǎn),JavaScript中的數(shù)組根本沒有索引,因?yàn)樗饕龖?yīng)該是數(shù)字,而JavaScript中數(shù)組的索引其實(shí)是字符串
構(gòu)造函數(shù)方式
1.無參構(gòu)造函數(shù),創(chuàng)建一空數(shù)組
var colors = new Array();
2.創(chuàng)建指定長度的數(shù)組,一個(gè)數(shù)字參數(shù)構(gòu)造函數(shù),指定數(shù)組長度(由于數(shù)組長度可以動(dòng)態(tài)調(diào)整,作用并不大)
var colors = new Array(5);
3.帶有初始化數(shù)據(jù)的構(gòu)造函數(shù),創(chuàng)建數(shù)組并初始化參數(shù)數(shù)據(jù)
var colors = new Array("red", "blue", "green");
使用Array構(gòu)造函數(shù)是可以省略new操作符,如下:
var colors = Array(3); // 創(chuàng)建一個(gè)包含 3 項(xiàng)的數(shù)組 var names = Array("Greg"); // 創(chuàng)建一個(gè)包含 1 項(xiàng),即字符串"Greg"的數(shù)組
注意,這里有個(gè)坑!
同樣是使用構(gòu)造函數(shù)的方式,并傳遞一個(gè)值,new Array(2)與new Array("2")是有區(qū)別的
new Array(2) // ["undefined", "undefined"] new Array("2") // ["2"]
字面量方式
數(shù)組字面量由一對包含數(shù)組項(xiàng)的方括號(hào)表示,多個(gè)數(shù)組項(xiàng)之間以逗號(hào)隔開,如下所示:
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含 3 個(gè)字符串的數(shù)組 var names = []; // 創(chuàng)建一個(gè)空數(shù)組 var values = [1,2,]; // 不要這樣!這樣會(huì)創(chuàng)建一個(gè)包含 2 或 3 項(xiàng)的數(shù)組 var options = [,,,,,]; // 不要這樣!這樣會(huì)創(chuàng)建一個(gè)包含 5 或 6 項(xiàng)的數(shù)組
字面量方式創(chuàng)建數(shù)組的兼容問題
字面量數(shù)組長度 | IE8及以下 | IE8以上 |
---|---|---|
["red", "blue", "green"] | 3 | 3 |
["red", "blue", , "green"] | 4 | 4 |
["red", "blue", "green", ,] | 4 | 3 |
[, , , , ,] | 6 | 5 |
javascript中數(shù)組其實(shí)就是個(gè)對象,只不過會(huì)自動(dòng)管理一些"數(shù)字"屬性和length屬性
var a1=[1,2,3,4]; console.log(a1[0]); //1 var i=1; console.log(a1[i]); //2 console.log(a1[++i]); //3
數(shù)組也是對象,我們可以使用索引的奧秘在于,數(shù)組會(huì)把索引值轉(zhuǎn)換為對應(yīng)字符串(1=>”1”)作為對象屬性名,驗(yàn)證:
console.log(1 in a1);//true,確實(shí)是一個(gè)屬性
索引特殊性在于數(shù)組會(huì)自動(dòng)更新length屬性,當(dāng)然因?yàn)镴avaScript語法規(guī)定數(shù)字不能作為變量名,所以我們不能顯示使用array.1這樣的格式。由此可見其實(shí)負(fù)數(shù),甚至非數(shù)字”索引“都是允許的,只不過這些會(huì)變成數(shù)組的屬性,而不是索引
var a = new Array(1,2,3); a[-10] = "a[-10]"; a["sss"] = "sss"; console.log(a); // [1, 2, 3, -10: "a[-10]", sss: "sss"]
為對象添加數(shù)組方法
var blankArray = []; var obj = { splice: blankArray.splice, push: blankArray.push, unshift: blankArray.unshift, pop: blankArray.pop, shift: blankArray.shift }; obj.push(); obj.unshift(); obj.pop(); obj.shift();數(shù)組中的length屬性
數(shù)組的length屬性不是只讀的
1.通過設(shè)置這個(gè)屬性,可以從數(shù)組的末尾移除項(xiàng)或向數(shù)組中添加新項(xiàng)
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含 3 個(gè)字符串的數(shù)組 colors.length = 2; alert(colors[2]); //undefined
2.利用 length 屬性也可以方便地在數(shù)組末尾添加新項(xiàng)
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個(gè)包含 3 個(gè)字符串的數(shù)組 colors[colors.length] = "black"; //(在位置3)添加一種顏色 colors[colors.length] = "brown"; //(在位置4)再添加一種顏色
3.利用length屬性刪除/清空數(shù)組
var arr = [1,2,3,4]; arr.length = 2; console.log(arr[2]); // "undefined" arr.length = 0; console.log(arr); // []密集數(shù)組與稀疏數(shù)組
密集數(shù)組:在Java和C語言中,數(shù)組是一片連續(xù)的存儲(chǔ)空間,有著固定的長度。加入數(shù)組其實(shí)位置是address,長度為n,那么占用的存儲(chǔ)空間是address[0],address[1],address[2].......address[n-1]。即數(shù)組元素之間是緊密相連的,不存在空隙。如下的js代碼創(chuàng)建的就是一個(gè)密集數(shù)組
var data = [3,1,6,9,2];
稀疏數(shù)組:與密集數(shù)組相反,javascript并不強(qiáng)制要求數(shù)組元素是緊密相連的,即允許間隙的存在。如下的js代碼是合法的:
var sparse = new Array(); sparse[0] = 0; sparse[3] = 3; alert(sparse[0]);//輸出0 alert(sparse[1]);//輸出undefined
密集數(shù)組的創(chuàng)建: var dense = Array.apply(null, Array(3));
稀疏數(shù)組與密集數(shù)組便利區(qū)別:
// 稀疏數(shù)組 var array = new Array(3); array[2] = "name"; for(var a in array){ console.log("index=" + a + ",value=" + array[a]); } // 密集數(shù)組 var dense = Array.apply(null, Array(3)); dense[2] = "name"; for(var a in dense){ console.log("index=" + a + ",value=" + dense[a]); } // 結(jié)果 // 稀疏數(shù)組:index=2,value=name // 密集數(shù)組:index=0,value=undefined // index=1,value=undefined // index=2,value=name
差別:稀疏數(shù)組只遍歷了已存在元素的次數(shù),密集數(shù)組遍歷了arr.length次
偽數(shù)組(類數(shù)組)特點(diǎn):
1.具有l(wèi)ength屬性;
2.按索引方式存儲(chǔ)數(shù)據(jù);
3.不具有數(shù)組的push()、pop()等方法;
偽數(shù)組無法直接調(diào)用數(shù)組方法或期望length屬性有什么特殊的行為,不具有數(shù)組的push()、pop()等方法,但仍可以對真正數(shù)組遍歷方法來遍歷它們。
常見的偽數(shù)組類型:
1.function內(nèi)的arguments對象;
2.調(diào)用getElementsByTagName, document.childNodes之類的,返回的NodeList對象都屬于偽數(shù)組;
3.自定義對象的偽數(shù)組;
如何將偽數(shù)組轉(zhuǎn)換成數(shù)組?
1.聲明一個(gè)空數(shù)組,通過遍歷偽數(shù)組把它們重新添加到新的數(shù)組(不推薦)
var links = document.querySelectorAll("a"); var arr = []; for (var i = 0; i < links.length; i++) { arr[arr.length] = links[i] }
2.使用數(shù)組的slice()方法 它返回的是數(shù)組,使用call或者apply指向偽數(shù)組
var arr = Array.prototype.slice.call(links);
3.原型繼承
links.__proto__ = Array.prototype;
4.ES6中數(shù)組的新方法 from()
var arr = Array.from(links);清空數(shù)組的幾種方式
1.length賦值為0
var arr = [1,2,3,4]; arr.length = 0; console.log(arr); // 輸出 [],空數(shù)組,即被清空了
2.splice
var arr = [1,2,3,4]; arr.splice(0,arr.length); console.log(arr); // 輸出 [],空數(shù)組,即被清空了
3.賦值為[]
var arr = [1,2,3,4]; arr = []; // 賦值為一個(gè)空數(shù)組以達(dá)到清空原數(shù)組
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87303.html
摘要:什么是數(shù)組數(shù)組是值的有序集合。這個(gè)位置用數(shù)字表示叫索引數(shù)組用字符串表示叫關(guān)聯(lián)數(shù)組。 什么是數(shù)組 數(shù)組是值的有序集合。數(shù)組中的每個(gè)值叫一個(gè)元素,每個(gè)元素在數(shù)組中都有一個(gè)唯一的位置。這個(gè)位置用數(shù)字表示叫索引數(shù)組;用字符串表示叫關(guān)聯(lián)數(shù)組。數(shù)組的元素可以是不同的類型可以動(dòng)態(tài)的向數(shù)組差人新元素,或者刪除指定元素 一維數(shù)組 定義數(shù)組 定義數(shù)組的方式有三種 /*數(shù)組字面量方式定義數(shù)組*/ var a...
摘要:示例代碼如下索引數(shù)組輸出結(jié)果為索引數(shù)組關(guān)聯(lián)數(shù)組注意關(guān)聯(lián)數(shù)組的數(shù)組的長度與元素的個(gè)數(shù)不一致,原因是的官方不支持關(guān)聯(lián)數(shù)組。定義一個(gè)空數(shù)組訪問二維數(shù)組中的元素循環(huán)遍歷二維數(shù)組 數(shù)組 概述 數(shù)組是什么 數(shù)組是值的有序集合。數(shù)組中的每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中都右一個(gè)唯一的位置。這個(gè)位置用數(shù)字表示,叫做索引數(shù)組;用字符串表示,叫做關(guān)聯(lián)數(shù)組。JavaScript數(shù)組是無類型的;數(shù)組的元素...
摘要:沒有循環(huán)循環(huán)次四屬性屬性屬性表示數(shù)組元素的數(shù)量,的數(shù)組元素并不是連續(xù)的,有些索引的位置可能沒有元素,所以屬性并不能真正表示元素的數(shù)量,其值等于數(shù)組最大索引。 一、JS沒有真正的數(shù)組 像C++,Java這些編程語言中數(shù)組元素分配的內(nèi)存都是連續(xù),這有利于性能提升,但是JS的數(shù)組不是這樣的。它使用對象模擬數(shù)組,即對象屬性為數(shù)字,并含有l(wèi)ength屬性。所以JS數(shù)組對象的內(nèi)存不是連續(xù)的,同一般...
摘要:索引使用場景優(yōu)加快查詢速度劣增刪改會(huì)產(chǎn)生額外的開銷占用空間返回集合中一半以上的數(shù)據(jù),全表掃描的效率高索引基礎(chǔ)基礎(chǔ)操作查看索引創(chuàng)建索引已有大量數(shù)據(jù)時(shí)可后臺(tái)執(zhí)行不阻塞刪除索引查看索引大小屬性索引順序?yàn)檎颍瑸槟嫘蛟趶?fù)合索引中需注意順序索引屬 索引使用場景 優(yōu):加快查詢速度 劣:增刪改會(huì)產(chǎn)生額外的開銷、占用空間 tips: 返回集合中一半以上的數(shù)據(jù),全表掃描的效率高 索引基礎(chǔ) 基礎(chǔ)操作 查看...
閱讀 975·2021-11-25 09:43
閱讀 2300·2019-08-30 15:55
閱讀 3163·2019-08-30 15:44
閱讀 2062·2019-08-29 16:20
閱讀 1463·2019-08-29 12:12
閱讀 1618·2019-08-26 12:19
閱讀 2293·2019-08-26 11:49
閱讀 1721·2019-08-26 11:42