數(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]= '我'
作用
- JavaScript數(shù)組是JavaScript數(shù)據(jù)類型之一
- JavaScript數(shù)組就是一組有序排列的值,而且每個值都有自己對應(yīng)的索引編號值
- 可以通過
new Array()
、Array()
或[]
創(chuàng)建數(shù)組 - 可以通過數(shù)組的索引值訪問數(shù)組的數(shù)組項
- 數(shù)組的
length
屬性主要用來保存數(shù)組的項目數(shù) - 可以簡單的通過
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.
-
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
改變toString
的this
引用為待檢測的對象,返回此對象的字符串表示,然后對比此字符串是否是[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
。
-
typeof
運算符不能檢測數(shù)組 - ES5的
isArray
函數(shù)是原生的檢測方法,IE8以下不支持 - 對象自身的
constructor
屬性和instanceof
操作符雖然也能檢測數(shù)組,但在frame
中會有問題 -
對象原生toString也能檢測數(shù)組
prototype.png
http://www.w3cplus.com/javascript/array-part-1.html
? w3cplus.com