愛上Javascript數組Array(一)——基礎介紹

Javascript,一門神奇的語言,它的數組也一樣獨特。咱們要去其糟粕,取其精華,把經常使用的最優實踐總結出來。若有錯誤,請指出。javascript

javascript數組是一種類數組的對象,擁有對象的特性。當屬性名是小而連續的整數時,應該使用數組,不然,使用對象。java

數組來源

全部的數組都是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 方式在一個網頁內是沒有問題,一旦嵌套其餘網頁,便存在兩個全局做用域,互相調用時的檢測就會出問題。app

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雖然有不少不太容易弄懂的地方,隨着長時間的學習,我已經慢慢地愛上它了(由於如今沒有妹子讓我愛)。

相關文章
相關標籤/搜索