1. 程式人生 > >js之陣列,物件,類陣列物件

js之陣列,物件,類陣列物件

陣列定義:簡而言之就是一組有序的資料集合,其索引為從0開始且自然增長的整數,其元素值可以是任何js資料!並且包含一個名為length的屬性,該屬性表示陣列元素的個數!

看著上面的定義,我們很容易就能大概知道陣列是什麼樣的東西,下面我們來看個簡單的例子:

1 2 3 4 5 var array = [1,2,3]; console.log(array[0])//1 ​console.log(array[1])//2 ​console.log(array[2])//3 ​console.log(array['length'])//3

從上面的例子我們可以看到,在宣告陣列時,我們只是顯式的聲明瞭陣列元素的值,並沒有顯式的給這些值定義索引和length屬性,但是在陣列定義好後我們發現就可以直接使用陣列的索引值來運算元組的元素了,從這不難看出,陣列元素的索引和length屬性是在陣列定義時根據陣列元素語言自動就幫你定義好了!而且很容易就能看出來,索引值是從0開始並且自然遞增的!

物件定義:js中物件型別為一組無序的由鍵->值組成的資料集合,其元素的鍵名和值都可以自定義!

我們來看一個例子:

1 2 3 4 var object = {'a': 1, 'b': 2} console.log(object['a'])//1 console.log(object['b'])//2 console.log(object['length'])//undefined

從上面的例子簡單來看,物件自身所擁有的(不包括繼承來的)任何屬性都是有使用者自定義的!

陣列與物件:

從上面的定義和例子上來看,不知道大家有沒有發現,陣列和物件在某些地方或時候其實是很相像的!

我們先看看他們相同的部分,首先我們可以把陣列的索引值看成的元素的鍵名,元素看成是值,那麼陣列是不是也變成了鍵->值構成的了!

我們在來看看他們不一樣的地方,陣列的所以值始終的從0開始遞增的數字,物件的屬性值可以是任何自定義的字串,並且陣列包含一個length屬性,而物件自身所擁有的(不包括繼承來的)任何屬性都是有使用者自定義的!也就是說我們,我們可以給顯式的給物件定義length屬性!

1 2 3 4 var arr = [1,2,3]; var obj = {0: 1, 1: 2, 2: 3, length: 3}; console.log(arr[0], obj[0])
//1, 1 console.log(arr['length'], obj['length'])//1, 1

通過對比,我們發現完全可以使用物件來模擬陣列,只要我們定義的物件的每個元素的鍵名都使用數字並且讓其保持遞增,且動態的定義一個length屬性來表示元素個數,那麼從效果上來說,基本就個數組相同了!這就是我們要說的:

類陣列物件:只包含使用從零開始,且自然遞增的整數做鍵名,並且定義了length表示元素個數的物件,我們就認為他是類陣列物件!

類陣列物件不僅是效果上跟陣列相似,並且在某些操作上也相同:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //定義陣列和類陣列物件 var arr = [1,2,3]; var obj = {0: 1, 1: 2, 2: 3, length: 3}; //元素讀寫操作 console.log(arr[0], obj[0])//1, 1 console.log(arr['length'], obj['length'])//1, 1 arr[0] = 9; obj[0] = 9; //遍歷 for(var i = 0, len = arr.length; i < len; i++) { arr[i].... } for(var i = 0, len = obj.length; i < len; i++) { obj[i].... }

我們看到,不僅在讀寫等操作上類陣列物件和陣列相似,並且在遍歷元素上都可以使用for迴圈進行遍歷!