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

資訊專(zhuān)欄INFORMATION COLUMN

數(shù)據(jù)類(lèi)型 數(shù)組

Charlie_Jade / 1902人閱讀

摘要:數(shù)組的本質(zhì)數(shù)組屬于一種特殊的對(duì)象。運(yùn)算符會(huì)返回?cái)?shù)組的類(lèi)型是對(duì)象的鍵名一律為字符串,所以,數(shù)組的鍵名其實(shí)也是字符串。數(shù)組的空位讀取遍歷無(wú)兩個(gè)逗號(hào)之間沒(méi)有任何值,我們稱該數(shù)組存在空位。數(shù)組的方法可以將類(lèi)似數(shù)組的對(duì)象變成真正的數(shù)組。

定義
數(shù)組的本質(zhì)
length 屬性
in 運(yùn)算符
for...in 循環(huán)和數(shù)組的遍歷
數(shù)組的空位
類(lèi)似數(shù)組的對(duì)象
參考鏈接

1.定義

任何類(lèi)型的數(shù)據(jù),都可以放入數(shù)組。

var arr = [
{a: 1},
[1, 2, 3],
function() {return true;}
];

arr[0] // Object {a: 1}
arr[1] // [1, 2, 3]
arr[2] // function (){return true;

如果數(shù)組的元素還是數(shù)組,就形成了多維數(shù)組。

var a = [[1, 2], [3, 4]];
a0 // 2
a1 // 4

2.數(shù)組的本質(zhì)
數(shù)組屬于一種特殊的對(duì)象。typeof運(yùn)算符會(huì)返回?cái)?shù)組的類(lèi)型是object
var arr = ["a", "b", "c"];

Object.keys(arr)
// ["0", "1", "2"]

對(duì)象的鍵名一律為字符串,所以,數(shù)組的鍵名其實(shí)也是字符串。之所以可以用數(shù)值讀取,是因?yàn)榉亲址逆I名會(huì)被轉(zhuǎn)為字符串。

var arr = ["a", "b", "c"];

arr["0"] // "a"
arr[0] // "a"

對(duì)象的鍵名一律為字符串,所以,數(shù)組的鍵名其實(shí)也是字符串。之所以可以用數(shù)值讀取,是因?yàn)榉亲址逆I名會(huì)被轉(zhuǎn)為字符串。

var arr = ["a", "b", "c"];

arr["0"] // "a"
arr[0] // "a"

3.length 屬性
只要是數(shù)組,就一定有l(wèi)ength屬性。該屬性是一個(gè)動(dòng)態(tài)的值,等于鍵名中的最大整數(shù)加上1。

var arr = ["a", "b"];
arr.length // 2

arr[2] = "c";
arr.length // 3

arr[9] = "d";
arr.length // 10

arr[1000] = "e";
arr.length // 1001

清空數(shù)組的一個(gè)有效方法,就是將length屬性設(shè)為0。

var arr = [ "a", "b", "c" ];

arr.length = 0;
arr // []

讀取新增的位置都會(huì)返回undefined。

值得注意的是,由于數(shù)組本質(zhì)上是一種對(duì)象,所以可以為數(shù)組添加屬性,但是這不影響length屬性的值。

var a = [];

a["p"] = "abc";
a.length // 0

a[2.1] = "abc";
a.length // 0
上面代碼將數(shù)組的鍵分別設(shè)為字符串和小數(shù),結(jié)果都不影響length屬性。因?yàn)?,length屬性的值就是等于最大的數(shù)字鍵加1,而這個(gè)數(shù)組沒(méi)有整數(shù)鍵,所以length屬性保持為0。

如果數(shù)組的鍵名是添加超出范圍的數(shù)值,該鍵名會(huì)自動(dòng)轉(zhuǎn)為字符串。

var arr = [];
arr[-1] = "a";
arr[Math.pow(2, 32)] = "b";

arr.length // 0
arr[-1] // "a"
arr[4294967296] // "b"

4.in 運(yùn)算符

檢查某個(gè)鍵名是否存在的運(yùn)算符in,適用于對(duì)象,也適用于數(shù)組。

注意,如果數(shù)組的某個(gè)位置是空位,in運(yùn)算符返回false。

var arr = [];
arr[100] = "a";

100 in arr // true
1 in arr // false
上面代碼中,數(shù)組arr只有一個(gè)成員arr[100],其他位置的鍵名都會(huì)返回false。

5.for...in 循環(huán)和數(shù)組的遍歷

得到建值

var a = [1, 2, 3];

for (var i in a) {
console.log(a[i]);
}
// 1
// 2
// 3

但是,for...in不僅會(huì)遍歷數(shù)組所有的數(shù)字鍵,還會(huì)遍歷非數(shù)字鍵。

var a = [1, 2, 3];
a.foo = true;

for (var key in a) {
console.log(key);
}
// 0
// 1
// 2
// foo
上面代碼在遍歷數(shù)組時(shí),也遍歷到了非整數(shù)鍵foo。所以,不推薦使用for...in遍歷數(shù)組。

數(shù)組的遍歷可以考慮使用for循環(huán)或while循環(huán)。

var a = [1, 2, 3];

// for循環(huán)
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}

// while循環(huán)
var i = 0;
while (i < a.length) {
console.log(a[i]);
i++;
}

var l = a.length;
while (l--) {
console.log(a[l]);
}
上面代碼是三種遍歷數(shù)組的寫(xiě)法。最后一種寫(xiě)法是逆向遍歷,即從最后一個(gè)元素向第一個(gè)元素遍歷。

var colors = ["red", "green", "blue"];
colors.forEach(function (color) {
console.log(color);
});
// red
// green
// blue

6.數(shù)組的空位delete length 讀取un 遍歷無(wú)

兩個(gè)逗號(hào)之間沒(méi)有任何值,我們稱該數(shù)組存在空位(hole)。

var a = [1, , 1];
a.length // 3但是非數(shù)字的不影響length 用delete也不影響

var a = [1, 2, 3];
delete a[1];

a[1] // undefined
a.length // 3

上面代碼用delete命令刪除了數(shù)組的第二個(gè)元素,這個(gè)位置就形成了空位,但是對(duì)length屬性沒(méi)有影響。也就是說(shuō),length屬性不過(guò)濾空位。所以,使用length屬性進(jìn)行數(shù)組遍歷,一定要非常小心

數(shù)組的空位是可以讀取的,返回undefined。但是
如果是空位,使用數(shù)組的forEach方法、for...in結(jié)構(gòu)、以及Object.keys方法進(jìn)行遍歷,空位都會(huì)被跳過(guò)。

空值為undefined

如果某個(gè)位置是undefined,遍歷的時(shí)候就不會(huì)被跳過(guò)。

var a = [undefined, undefined, undefined];

a.forEach(function (x, i) {
console.log(i + ". " + x);
});
// 0. undefined
// 1. undefined
// 2. undefined

for (var i in a) {
console.log(i);
}
// 0
// 1
// 2

Object.keys(a)
// ["0", "1", "2"]

這就是說(shuō),空位就是數(shù)組沒(méi)有這個(gè)元素,所以不會(huì)被遍歷到,而undefined則表示數(shù)組有這個(gè)元素,值是undefined,所以遍歷不會(huì)跳過(guò)。

7.類(lèi)似數(shù)組的對(duì)象

如果一個(gè)對(duì)象的所有鍵名都是正整數(shù)或零,并且有l(wèi)ength屬性,那么這個(gè)對(duì)象就很像數(shù)組,語(yǔ)法上稱為“類(lèi)似數(shù)組的對(duì)象

var obj = {
0: "a",
1: "b",
2: "c",
length: 3
};

obj[0] // "a"
obj[1] // "b"
obj.length // 3
obj.push("d") // TypeError: obj.push is not a function

沒(méi)有push方法
length靜態(tài)的

典型的“類(lèi)似數(shù)組的對(duì)象”是函數(shù)的arguments對(duì)象,以及大多數(shù) DOM 元素集,還有字符串。

// arguments對(duì)象
function args() { return arguments }
var arrayLike = args("a", "b");

arrayLike[0] // "a"
arrayLike.length // 2
arrayLike instanceof Array // false

// DOM元素集
var elts = document.getElementsByTagName("h3");
elts.length // 3
elts instanceof Array // false

// 字符串
"abc"[1] // "b"
"abc".length // 3
"abc" instanceof Array // false
上面代碼包含三個(gè)例子,它們都不是數(shù)組(instanceof運(yùn)算符返回false),但是看上去都非常像數(shù)組。

數(shù)組的slice方法可以將“類(lèi)似數(shù)組的對(duì)象”變成真正的數(shù)組。

var arr = Array.prototype.slice.call(arrayLike);
除了轉(zhuǎn)為真正的數(shù)組,“類(lèi)似數(shù)組的對(duì)象”還有一個(gè)辦法可以使用數(shù)組的方法,就是通過(guò)call()把數(shù)組的方法放到對(duì)象上面。

function print(value, index) {
console.log(index + " : " + value);
}

Array.prototype.forEach.call(arrayLike, print);
上面代碼中,arrayLike代表一個(gè)類(lèi)似數(shù)組的對(duì)象,本來(lái)是不可以使用數(shù)組的forEach()方法的,但是通過(guò)call(),可以把forEach()嫁接到arrayLike上面調(diào)用。

下面的例子就是通過(guò)這種方法,在arguments對(duì)象上面調(diào)用forEach方法。

// forEach 方法
function logArgs() {
Array.prototype.forEach.call(arguments, function (elem, i) {

console.log(i + ". " + elem);

});
}

// 等同于 for 循環(huán)
function logArgs() {
for (var i = 0; i < arguments.length; i++) {

console.log(i + ". " + arguments[i]);

}
}

字符串也是類(lèi)似數(shù)組的對(duì)象,所以也可以用Array.prototype.forEach.call遍歷。

Array.prototype.forEach.call("abc", function (chr) {
console.log(chr);
});
// a
// b
// c
注意,這種方法比直接使用數(shù)組原生的forEach要慢,所以最好還是先將“類(lèi)似數(shù)組的對(duì)象”轉(zhuǎn)為真正的數(shù)組,然后再直接調(diào)用數(shù)組的forEach方法。

var arr = Array.prototype.slice.call("abc");
arr.forEach(function (chr) {
console.log(chr);
});
// a
// b
// c

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106049.html

相關(guān)文章

  • Java編程基礎(chǔ)06——數(shù)組

    摘要:空指針異常原因數(shù)組已經(jīng)不在指向堆內(nèi)存了。當(dāng)訪問(wèn)數(shù)組不存在的索引時(shí),就會(huì)出現(xiàn)數(shù)組索引越界異常數(shù)組的操作遍歷掌握案例演示數(shù)組遍歷就是依次輸出數(shù)組中的每一個(gè)元素。內(nèi)循環(huán)控制的是一維數(shù)組的長(zhǎng)度。 1.數(shù)組概述和定義格式說(shuō)明 A:為什么要有數(shù)組(容器): 為了存儲(chǔ)同種數(shù)據(jù)類(lèi)型的多個(gè)值 B:數(shù)組概念: 數(shù)組是存儲(chǔ)同一種數(shù)據(jù)類(lèi)型多個(gè)元素的集合。也可以看成是一個(gè)容器;數(shù)組既可以存儲(chǔ)基本數(shù)據(jù)類(lèi)型,也可...

    荊兆峰 評(píng)論0 收藏0
  • 真假美猴王-Numpy數(shù)據(jù)與Python數(shù)組的區(qū)別與聯(lián)系

    摘要:下文統(tǒng)一稱為數(shù)組是存儲(chǔ)單一數(shù)據(jù)類(lèi)型的多維數(shù)組同語(yǔ)言數(shù)組直接保存數(shù)值而則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。動(dòng)態(tài)數(shù)據(jù)類(lèi)型與的數(shù)組和的這些不可變數(shù)據(jù)類(lèi)型的適用場(chǎng)景等可變數(shù)據(jù)類(lèi)型適用于需要不斷對(duì)原始數(shù)據(jù)進(jìn)行修改的場(chǎng)景。 showImg(https://segmentfault.com/img/remote/1460000018925396);Numpy,是python中的一個(gè)矩陣計(jì)算包,功能類(lèi)似ma...

    鄒強(qiáng) 評(píng)論0 收藏0
  • Java? 教程(變量)

    變量 正如你在上一課中所了解到的,對(duì)象將其狀態(tài)存儲(chǔ)在字段中。 int cadence = 0; int speed = 0; int gear = 1; 什么是對(duì)象?討論向你介紹了字段,但你可能還有一些問(wèn)題,例如:命名字段的規(guī)則和約定是什么?除了int之外,還有哪些其他數(shù)據(jù)類(lèi)型?在聲明字段時(shí)是否必須初始化字段?如果未明確初始化字段,是否為字段分配了默認(rèn)值?我們將在本課中探討這些問(wèn)題的答案,但在我們...

    elina 評(píng)論0 收藏0
  • 【建議收藏】?jī)扇f(wàn)字深度解讀 指針 ,學(xué)好指針看這一篇文章就夠了

    摘要:在位機(jī)器上,指針變量的大小為個(gè)字節(jié)。指針類(lèi)型的強(qiáng)制類(lèi)型轉(zhuǎn)換對(duì)指針變量進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換的一般形式將保存的類(lèi)型指針強(qiáng)制轉(zhuǎn)換為類(lèi)型指針后賦值給,其中還是為,沒(méi)有改變。 前言 大家好,我是努力學(xué)習(xí)的少年,今天這篇文章是專(zhuān)門(mén)寫(xiě)關(guān)于指針的知識(shí)點(diǎn),因?yàn)橹羔槂?nèi)容比較多,所以我將指針的這篇文章我將它分為...

    zhkai 評(píng)論0 收藏0
  • 1、流程控制語(yǔ)句switch 2、數(shù)組 3、隨機(jī)點(diǎn)名器案例

    摘要:如下所示第一小組銷(xiāo)售額為萬(wàn)元第二小組銷(xiāo)售額為萬(wàn)元第三小組銷(xiāo)售額為萬(wàn)元。 01switch語(yǔ)句解構(gòu) * A:switch語(yǔ)句解構(gòu) * a:switch只能針對(duì)某個(gè)表達(dá)式的值作出判斷,從而決定程序執(zhí)行哪一段代碼。 * b:格式如下: swtich(表達(dá)式){ case 常量1 : 要執(zhí)行的...

    余學(xué)文 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Charlie_Jade

|高級(jí)講師

TA的文章

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