陣列是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 必選,規定應該刪除多少元素。未規定此引...