理解數組,對象,類數組對象

本文章旨在講解數組,對象,類數組對象之間的聯繫。但會穿插一些其餘的相關知識。
首先理解它們的概念:
一、數組
(1)什麼是數組:簡而言之就是一組有序的數據集合。
它的定義方法有三種。javascript

var arr=[值1,值2,值3];                //隱式建立

var arr=new Array(值1,值2,值3);      //直接實例化

var array=new Array(size);           //建立數組並指定長度
//方法一
var arr1 = [1,3,5,7,9];
    
//方法二
var arr2 = new Array(2,4,6,8,10);

//方法三
var arr3 = new Array(3);//固定數組長度爲3
arr3[0] = 1;
arr3[1] = 2;
arr3[2] = 3;

(2)數組的三大屬性java

  • length

數組定義時能夠無需指定數組長度數組

let arr4 = [1,3,52,5,2];
console.log(arr4.length);//5
  • constructor
let arr5 = [1,3,5,7];
console.log(arr5.constructor);//ƒ Array() { [native code] }
  • prototype

prototype原型對象是javascript基於原型鏈表實現的一個重要屬性。
Javascript角度:1. 實例對象沒有prototype屬性,只有構造函數纔有prototype屬性,也就是說構造函數自己保存了對prototype屬性的引用。。2. prototype屬性對象有一個constructor屬性,保存了引用他本身的構造函數的引用(看起來像是個循環:A指向B,B指向A...) 3.prototype對象(不要被我這裏的屬性對象,對象,對象屬性搞暈乎了,說是屬性對象,就是說當前這個東西他首先是某個對象的屬性,同時本身也是個對象。對象屬性就是說它是某個對象的屬性。)的屬性變量和屬性對象將會被該prototype對象引用的構造函數所建立的對象繼承(function A(){} A.prototype.pa = function(){} var oA = new A(); 那麼oA將會繼承屬性函數pa)。**數據結構

let arr6 = [1,2,4,5,6];
console.log(arr6.prototype)//undefined

通常咱們用到的時候是這樣用的函數

let arr7 = [1,3,5,6,7,8];
Array.prototype.alert = function(){console.log('arr7')}//這裏封裝的是數組的公有方法。
console.log(arr7.alert())//arr7

對於想要深刻的瞭解請百度原型鏈模式,這樣您能夠詳細的研究它的一些公有方法。
二、對象
(1)什麼是對象。
對象定義:js中對象類型爲一組無序的由鍵->值組成的數據集合,其元素的鍵名和值均可以自定義
它的定義方法有兩種。prototype

var obj1 = {name:"zhang",age:355,id:1};
var obj2 = new Object({name:"zhang",age:234,id:2})
console.log(obj1['name'])//zhang
console.log(obj2.length)//undefined

以上的例子咱們能夠得出:對象自身所擁有的(不包括繼承來的)任何屬性都是有用戶自定義的。code

咱們如今能夠將數組和對象進行一下比較,是否是感受數組和對象很相像。
再舉出一個例子。咱們進行比較可能更直觀一些。對象

let ary = [2,2,4,5];
let o = {0:23,1:23,2:32,length:3};
console.log(ary[0],o[0]);//2,23
console.log(ary.length,o.length);//4,3

經過例子咱們不難發現:咱們發現徹底可使用對象來模擬數組,只要咱們定義的對象的每一個元素的鍵名都使用數字而且讓其保持遞增,且動態的定義一個length屬性來表示元素個數,那麼從效果上來講,基本就個數組相同了!繼承

類數組對象:只包含使用從零開始,且天然遞增的整數作鍵名,而且定義了length表示元素個數的對象,咱們就認爲它是類數組對象!ip

  • 通常咱們經常使用到的類數組對象如:arguments,獲取的元素集合

類數組對象不只在效果上與數組類似,在某些操做上也是相同的。

//定義數組和類數組對象
let ary1 = [2,5,23,5,52];
let oo = {0:4,1:32,2:324,length:3};
//讀寫操做
console.log(ary1[1],oo[1],ary1["length"],oo["length"]);//5,32,5,3
ary1[0] = 4;
oo[0] = 6;
console.log(ary1[0],oo[0]);//4,6
//遍歷
for(var i=0;i<ary1.length;i++){
console.log(ary1[i]);
}
for(var i=0;i<oo.length;i++){
console.log(oo[i]);
}

經過簡單的對比,咱們不難看出,其實咱們能夠從數據結構上把js中的數組歸爲對象,由於咱們可使用對象來模擬數組,這裏僅僅說的是數據結構上,其實它們自己所繼承來的方法和一些屬性是不一樣的。

相關文章
相關標籤/搜索