成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《javascript高級(jí)程序設(shè)計(jì)》筆記_數(shù)組 稀疏數(shù)組 偽數(shù)組

pepperwang / 3088人閱讀

摘要:數(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è)位置來保存對象, 以此類推

牢記:

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í)是字符串

創(chuàng)建數(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
數(shù)組 VS 對象

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

相關(guān)文章

  • JavaScript-數(shù)組

    摘要:什么是數(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...

    XanaHopper 評論0 收藏0
  • JavaScript學(xué)習(xí)第四天筆記數(shù)組

    摘要:示例代碼如下索引數(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ù)組的元素...

    lncwwn 評論0 收藏0
  • JS-Array

    摘要:沒有循環(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ù)的,同一般...

    madthumb 評論0 收藏0
  • Mongo索引學(xué)習(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ǔ)操作 查看...

    tianhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<