js學習筆記之陣列Array的一些特性

2021-07-27 06:25:20 字數 1857 閱讀 1332

陣列是js中重要的資料型別,在以後的開發中會經常碰到它,其實陣列也是物件。

var myarray = ["a","b","c"];
var myobject = ;

myarray 繼承自 array.prototype,myobject繼承自object.prototype,他們都有很多有用的方法,也有很多類似,當然也有不同。

myarray[0]; // "a" ,數字0會被自動轉換為字串"0",下同

myobject[0]; // "a"

length:陣列的length屬性的值等於陣列的最大下標的值+1,所以length不一定等於陣列的屬性的個數;

myarray.length; //3

陣列具有length屬性,物件沒有。陣列的length沒有上界,不會產生越界錯誤。

如果陣列的下標等於 或者超過 了陣列的length呢?

myarray[4] = "e";

此時陣列的長度

myarray.length; // 5

如果把陣列的length值設小,將會把大於等於新length值的屬性刪除。

myarray.length = 2; // myarray 是 ["a","b"]

delete運算子可以從物件刪除屬性,同樣的也可以從陣列刪除屬性,但是被刪除的下標之後的屬性並不會遞減,被刪除的位置留下了乙個空位,所以我們可以使用陣列的splice方法。列舉

for in 語句可以用來列舉物件的屬性,同樣適用於陣列,但是存在問題:1,無序;2,從原型鏈中的繼承屬性也可能會被列舉,所以一般用for迴圈語句。

區分資料型別是物件還是陣列

typeof myarray; // "object"

typeof myobject; // "object"

myarray instanceof array; // true

myarray instanceof object; //true

js中並未提供很好的機制來區分陣列和物件,所以只有自己來自定義了。

var isarray = function(value)

上面的函式還是存在缺陷,就是在前端從不同的window/frame構造的陣列會判斷失敗。

我們知道:

myobject.tostring(); // "[object object]"

所以如果陣列應用了物件原型中的tostring方法呢?

給array.prototype 擴充一下:

array.prototype.isarray = object.prototype.tostring;

myarray.isarray(); // "[object array]"

所以可以這麼寫

var isarray = function(value)

因為陣列就是物件,所以可以直接給陣列增加方法

myarray.isarray = function() 

myarray.isarray(); // true

注意,上面出現了三個 isarray 函式 他們是不同的。有何不同呢?

(當然現在有原生的方法isarray(es5.1) )

js 中的陣列Array

1 ecmascript 中的陣列與其他語言中的陣列有些不同,ecmascript中的陣列可以每一項都不同型別,陣列的大小可以動態調整。var colors new array var colors new array 20 var colors new array red blue green v...

前端學習筆記之 Array

1.array 關於陣列的宣告方式 1 var arr new array 3 長度為3的空陣列 2 var arr new array 1,2,3,4 直接初始化 3 var arr 1,2,3,4 這樣直接初始化也行.注意 讀取陣列時若超出範圍則返回undefined.關於arr.length這...

js 清空array陣列

兩種實現方式 1.splice 刪除元素並新增新元素,直接對陣列進行修改,返回含有被刪除元素的陣列。arrayobject.splice index,howmany,element1,elementx index 必選,規定從何處新增 刪除元素。howmany 必選,規定應該刪除多少元素。未規定此引...