js數(shù)組

數(shù)組

什么是數(shù)組

數(shù)組就是按照次序排列的一組值,每個值都有自己的下標(biāo):var arr =[1,2,3]

數(shù)組里面的值可以保存任何類型的數(shù)據(jù):var arr = [35,'中國',function(){},new Date(),,null]

創(chuàng)建數(shù)組

1.使用Array創(chuàng)建數(shù)組

  • 使用Array創(chuàng)建數(shù)組 var arr = new Array() 創(chuàng)建了一個空數(shù)組

  • var arr1 = new Array(3) 創(chuàng)建長度為3的數(shù)組,arr1為[undefied*3],需要注意的是var arr2 = new Array('3');創(chuàng)建arr2長度為1值為3的數(shù)組

  • var arr = new Array(1,2,3) 創(chuàng)建指定項的數(shù)組

    2.使用[]創(chuàng)建數(shù)組

  • 直接用[]創(chuàng)建數(shù)組。每個數(shù)組項之間用(,)隔開:var arr = ['a','b']

數(shù)組元素的訪問
  • 數(shù)組中的每一項都有一個特定的索引號,從0開始.可以通過數(shù)組的索引訪問數(shù)組: var arr = ['大','家','好'] arr[0] 為:大 0為要訪問的下標(biāo)值
  • 也可以通過下標(biāo)修改值arr[1]='人' ['大','人','好']
數(shù)組length屬性
  • length屬性保存數(shù)組的長度(最大下標(biāo)加1),var arr = [1,2,3,4,5] arr.length為5
  • 數(shù)組的length屬性是一個動態(tài)的值,可以動態(tài)修改值arr[9]='w',arr.length為10數(shù)組中間沒值的為undefined,不需要連續(xù);arr[7]為undefined
  • length是可寫的,人為的設(shè)置長度小于數(shù)組原有的長度,數(shù)組會自動減少到設(shè)置的length的長度 arr.length = 2 arr[2]undefined ;arr為[1,2]
  • 利用length屬性給數(shù)組末尾添加新的數(shù)組項 arr[arr.length] = '我',arr[2]= '我'

作用

  1. JavaScript數(shù)組是JavaScript數(shù)據(jù)類型之一
  2. JavaScript數(shù)組就是一組有序排列的值,而且每個值都有自己對應(yīng)的索引編號值
  3. 可以通過new Array()、Array()[]創(chuàng)建數(shù)組
  4. 可以通過數(shù)組的索引值訪問數(shù)組的數(shù)組項
  5. 數(shù)組的length屬性主要用來保存數(shù)組的項目數(shù)
  6. 可以簡單的通過length屬性值來刪除數(shù)組的最后一個值或給數(shù)組最后添加一個數(shù)組項目值

檢測數(shù)組方法

很多時候需要對JavaScript中的數(shù)據(jù)類型(Function,String,Number,Undefined,Boolean,Object)做判斷,常用有typeof,instanceof

  • typeof

能判斷基礎(chǔ)數(shù)據(jù)類型如typeof("a")得到string 但是在檢驗數(shù)組,對象,null時會返回object.

object.png
nan.png
  • ES5 的isArray

    var arr= [1,2,3], Array.isArray(arr); true

    IE8之前的版本不支持

  • 對象自身的constructor屬性

    var arr = [1,2,3] arr.constructor === Array 得到true

  • instanceof操作符

    instanceof可以用來判斷某個構(gòu)造函數(shù)的prototype屬性是否存在另外一個要檢測的對象上,就是判斷instancof前面的對象是否是后面對象的類或?qū)ο蟮膶嵗?code>a instancof b返回true,表示a是b的一個實例 ;arr instanceof Array 返回true.

  • 對象原生toString檢測

    Object.prototype.toString的行為:首先,取得對象的一個內(nèi)部屬性[[Class]],然后依據(jù)這個屬性,返回一個類似于"[object Array]"的字符串作為結(jié)果(看過ECMA標(biāo)準(zhǔn)的應(yīng)該都知道,[[]]用來表示語言內(nèi)部用到的、外部不可直接訪問的屬性,稱為“內(nèi)部屬性”)。利用這 個方法,再配合call,我們可以取得任何對象的內(nèi)部屬性[[Class]],然后把類型檢測轉(zhuǎn)化為字符串比較,以達(dá)到我們的目的。

    ?

    call改變toStringthis引用為待檢測的對象,返回此對象的字符串表示,然后對比此字符串是否是[object Array],以判斷其是否是Array的實例。為什么不直接o.toString()?嗯,雖然Array繼承自Object,也會有toString方法,但是這個方法有可能會被改寫而達(dá)不到我們的要求,而Object.prototype則是老虎的屁股,很少有人敢去碰它的,所以能一定程度保證其“純潔性”:)

    JavaScript 標(biāo)準(zhǔn)文檔中定義: [[Class]] 的值只可能是下面字符串中的一個:Arguments, Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String。

  1. typeof運算符不能檢測數(shù)組
  2. ES5的isArray函數(shù)是原生的檢測方法,IE8以下不支持
  3. 對象自身的constructor屬性和instanceof操作符雖然也能檢測數(shù)組,但在frame中會有問題
  4. 對象原生toString也能檢測數(shù)組


    prototype.png

http://www.w3cplus.com/javascript/array-part-1.html
? w3cplus.com


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容