前言
js中的數組是js對象的特殊形式,它有一些特殊行爲須要注意。全部的數組都是構造於Array(),都從Array.prototype之上繼承一套數組操做方法。java
數組的定義
是值的有序列表。數組中的每一個值都叫作一個元素,每一個元素在數組中有一個位置,以數字來表示,稱爲索引。chrome
js數組特性
這裏簡單列出須要注意的特性,以後詳細說明重要的部分。數組
不限類型:數組中的元素能夠是任意類型的,同一個數組中也能夠擁有不一樣類型的元素。函數
動態:會根據須要增加或縮減,不須要在聲明時指定數組元素中的個數。數組大小變化時不須要從新分配空間。(區別於真正意義上的數組,js中是使用對象實現的。)spa
是特殊的對象:第一門語言是java,剛學的時候常常搞出數組下標越界。js中的數本質是特殊對象,模擬的數組行爲。訪問不存在的下標時,只會單純的返回undefined。prototype
稀疏數組:數組中的索引不連續,存在空下標。code
數組長度
每一個數組都有一個length屬性,就是這個屬性讓它區別於其餘的js對象。對象
索引:js中的數組本質是對象,全部的索引其實都是屬性名,但只有2~32的平方-2之間的整數才叫作索引0,區別於普通屬性。blog
length的兩個特殊行爲:繼承
爲數組增長元素時(使用索引添加,使用索引以外的屬性不會觸發),length會自動加一。
爲length屬性設置一個小於當前長度的非負整數n時,當前那些下標大於等於n的元素會從數組中刪除。
var arr = []; console.log(arr.length); // 0 // 添加一個元素以後數組長度+1 arr[0] = 1; console.log(arr.length); // 1 // 將length賦值爲0以後數組被清空 arr.length = 0; console.log(arr); // []
稀疏數組
數組之間的索引能夠不是連續的,他們之間能夠有空值。當一個數組中存在不連續的索引,它就變成了稀疏數組。
var arr = []; arr[0] = 1; arr[2] = 3; console.log(arr); console.log(arr[1]);
下圖是稀疏數組chrome下的輸出,它爲咱們使用empty 標識了數組中空出的下表。訪問空出的下表時,返回的是undefined。
避免產生稀疏數組
1,length屬性不可靠,稀疏數組的length屬性要少於其中元素的實際個數。
2,足夠稀疏(存在大量不連續的下標)的數組在實現上比稠密數組更慢,內存利用率更高。查找元素的事件也跟常規對象查找屬性時間同樣長。
作爲對象的數組
數組也是對象,也能夠擁有本身的屬性,咱們可使用這個特性作一些簡單的時事情,複雜的邏輯仍是使用普通對象。
var arr = [1,2,3]; // 使用了非索引屬性,此時length屬性並不會增長。 arr.name = "number";
小結:
1,數組是值的有序列表。
2,js中的數組特性:數組元素不限類型、長度會自動增長或減小、是特殊的對象、不連續的索引下的複製會造成稀疏數組。
3,能夠數組的length屬性刪除數組元素,但不要給他設置大於數組長度的值,會造成稀疏數組。
4,能夠擁有索引以外的屬性,但不要濫用,複雜的操做仍是交給普通對象,語義會更加明確。
5,全部的數組出自於內置的構造函數Array(),並共享Array.prototype之上定義的方法。