首頁 >web前端 >js教程 >Javascript數組Array基礎介紹_基礎知識

Javascript數組Array基礎介紹_基礎知識

WBOY
WBOY原創
2016-05-16 15:10:511189瀏覽

Javascript,一門神奇的語言,它的陣列也同樣獨特。我們要去其糟粕,取其精華,把常用的最優實踐總結出來。如有錯誤,請指出。

javascript數組是一種類別數組的對象,擁有對象的特性。當屬性名稱是小而連續的整數時,應該使用數組,否則,使用物件。

陣列來源

所有的陣列都是Array建構出來的,我們來測試一下constructor這個屬性。

var arr = [];
arr.constructor === Array; // true
arr.constructor === Array.prototype.constructor; // true

建立陣列

//数组字面量方式
var arr1 = [1, 2, 3]; // [1,2,3]

//构造函数方式
var arr2 = new Array();    // [] 空数组
var arr3 = new Array('9');   // ["9"] 一个字符串元素
var arr4 = new Array(9);    // [] 数组长度length为9
var arr5 = new Array([9]);   // [[9]] 相当于二维数组
var arr6 = new Array(1, 2, 3); // [1, 2, 3]
var arr7 = new Array(1, function f(){}, {o : 6}, null,undefined,true);
// 数组可以存储任意混合数据类型

由於arr4的方式,當只有一個數字參數傳遞到Array的建構子中,建構子會傳回設定了length屬性的空數組。所以建議使用陣列字面量方式,短小而簡潔。

偵測物件是否為陣列

var arr1 = [1, 2, 3];
typeof(arr1); // object

眾所周知,typeof不能正確檢測類型。

arr1 instanceof Array; //true

instanceof 方式在一個網頁內是沒有問題,一旦嵌套其他網頁,便存在兩個全域作用域,互相呼叫時的偵測就會出問題。

Array.isArray(arr1); // true

Array.isArray() 是ECMAScript5 新增的方法,沒有缺陷。唯一的問題是ie8瀏覽器不支持,ie9瀏覽器在嚴格模式下也不支援。

Object.prototype.toString.apply(arr1).slice(8, -1); // Array

最後一種方式是檢測類型的最佳方法。

陣列長度

陣列的length也是它的屬性,增大length也不會發生越界錯誤。
length值等於陣列最大的整數屬性名稱加1。

var arr1 = [];
arr1[9] = 1; // 长度为10,只包含一个元素的数组

設小值會將屬性名大於等於length的屬性刪除。
如果將length值設為0,相當於清空數組。

var arr2 = [1, 2, 3, 4, 5];
arr2.length = 3; // [1, 2, 3]
arr2.length = 0; // []

陣列遍歷

遍歷數組不要使用for in迴圈來遍歷數組,因為for in會遍歷原型鏈上的所有屬性,但我們並不需要這麼多。推薦使用for循環的方式。

var arr1 = [1, 2, 3];
arr1.test = 9;

//for in 方式
for(var prop in arr1){
  cosole.log(prop, arr1[prop]);
}
// 输出如下
// 0 1
// 1 2
// 2 3
// test 9

//for循环方式
for(var i = 0, len = arr1.length; i < len; i++){
  console.log(arr1[i]);
}
//输出如下
// 1
// 2
// 3

我們看到for in方式多出了一個test值,可以用hasOwnProperty函數排除,但那會比for迴圈的方式慢很多。
快取數組長度很有必要的一步,每次訪問都是有效能開銷的(最新的瀏覽器在這方面做了最佳化)。

小結

簡單介紹了Array的相關基礎知識,到這裡也算是能對Array有更全面的理解了。下一篇介紹Array的方法。

Javascript雖然有很多不太容易弄清楚的地方,隨著長時間的學習,我已經慢慢地愛上它了(因為現在沒有女孩讓我愛)。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn