數(shù)組
什么是數(shù)組
數(shù)組就是按照次序排列的一組值,每個(gè)值都有自己的下標(biāo):
var arr =[1,2,3]數(shù)組里面的值可以保存任何類(lèi)型的數(shù)據(jù):
var arr = [35,'中國(guó)',function(){},new Date(),,null]
創(chuàng)建數(shù)組
1.使用Array創(chuàng)建數(shù)組
使用Array創(chuàng)建數(shù)組
var arr = new Array()創(chuàng)建了一個(gè)空數(shù)組var arr1 = new Array(3)創(chuàng)建長(zhǎng)度為3的數(shù)組,arr1為[undefied*3],需要注意的是var arr2 = new Array('3');創(chuàng)建arr2長(zhǎng)度為1值為3的數(shù)組-
var arr = new Array(1,2,3)創(chuàng)建指定項(xiàng)的數(shù)組2.使用[]創(chuàng)建數(shù)組
直接用[]創(chuàng)建數(shù)組。每個(gè)數(shù)組項(xiàng)之間用(,)隔開(kāi):
var arr = ['a','b']
數(shù)組元素的訪(fǎng)問(wèn)
- 數(shù)組中的每一項(xiàng)都有一個(gè)特定的索引號(hào),從0開(kāi)始.可以通過(guò)數(shù)組的索引訪(fǎng)問(wèn)數(shù)組:
var arr = ['大','家','好']arr[0]為:大 0為要訪(fǎng)問(wèn)的下標(biāo)值 - 也可以通過(guò)下標(biāo)修改值
arr[1]='人'['大','人','好']
數(shù)組length屬性
-
length屬性保存數(shù)組的長(zhǎng)度(最大下標(biāo)加1),var arr = [1,2,3,4,5]arr.length為5 - 數(shù)組的
length屬性是一個(gè)動(dòng)態(tài)的值,可以動(dòng)態(tài)修改值arr[9]='w',arr.length為10數(shù)組中間沒(méi)值的為undefined,不需要連續(xù);arr[7]為undefined - length是可寫(xiě)的,人為的設(shè)置長(zhǎng)度小于數(shù)組原有的長(zhǎng)度,數(shù)組會(huì)自動(dòng)減少到設(shè)置的
length的長(zhǎng)度arr.length = 2arr[2]為undefined;arr為[1,2] - 利用
length屬性給數(shù)組末尾添加新的數(shù)組項(xiàng)arr[arr.length] = '我',arr[2]= '我'
作用
- JavaScript數(shù)組是JavaScript數(shù)據(jù)類(lèi)型之一
- JavaScript數(shù)組就是一組有序排列的值,而且每個(gè)值都有自己對(duì)應(yīng)的索引編號(hào)值
- 可以通過(guò)
new Array()、Array()或[]創(chuàng)建數(shù)組 - 可以通過(guò)數(shù)組的索引值訪(fǎng)問(wèn)數(shù)組的數(shù)組項(xiàng)
- 數(shù)組的
length屬性主要用來(lái)保存數(shù)組的項(xiàng)目數(shù) - 可以簡(jiǎn)單的通過(guò)
length屬性值來(lái)刪除數(shù)組的最后一個(gè)值或給數(shù)組最后添加一個(gè)數(shù)組項(xiàng)目值
檢測(cè)數(shù)組方法
很多時(shí)候需要對(duì)JavaScript中的數(shù)據(jù)類(lèi)型(
Function,String,Number,Undefined,Boolean,Object)做判斷,常用有typeof,instanceof
typeof
能判斷基礎(chǔ)數(shù)據(jù)類(lèi)型如
typeof("a")得到string但是在檢驗(yàn)數(shù)組,對(duì)象,null時(shí)會(huì)返回object.


-
ES5 的
isArrayvar arr= [1,2,3],Array.isArray(arr);trueIE8之前的版本不支持
-
對(duì)象自身的constructor屬性
var arr = [1,2,3]arr.constructor === Array得到true -
instanceof操作符instanceof可以用來(lái)判斷某個(gè)構(gòu)造函數(shù)的prototype屬性是否存在另外一個(gè)要檢測(cè)的對(duì)象上,就是判斷instancof前面的對(duì)象是否是后面對(duì)象的類(lèi)或?qū)ο蟮膶?shí)例。a instancof b返回true,表示a是b的一個(gè)實(shí)例 ;arr instanceof Array返回true. -
對(duì)象原生
toString檢測(cè)Object.prototype.toString的行為:首先,取得對(duì)象的一個(gè)內(nèi)部屬性[[Class]],然后依據(jù)這個(gè)屬性,返回一個(gè)類(lèi)似于"[object Array]"的字符串作為結(jié)果(看過(guò)ECMA標(biāo)準(zhǔn)的應(yīng)該都知道,[[]]用來(lái)表示語(yǔ)言?xún)?nèi)部用到的、外部不可直接訪(fǎng)問(wèn)的屬性,稱(chēng)為“內(nèi)部屬性”)。利用這 個(gè)方法,再配合call,我們可以取得任何對(duì)象的內(nèi)部屬性[[Class]],然后把類(lèi)型檢測(cè)轉(zhuǎn)化為字符串比較,以達(dá)到我們的目的。?
call改變toString的this引用為待檢測(cè)的對(duì)象,返回此對(duì)象的字符串表示,然后對(duì)比此字符串是否是[object Array],以判斷其是否是Array的實(shí)例。為什么不直接o.toString()?嗯,雖然Array繼承自Object,也會(huì)有toString方法,但是這個(gè)方法有可能會(huì)被改寫(xiě)而達(dá)不到我們的要求,而Object.prototype則是老虎的屁股,很少有人敢去碰它的,所以能一定程度保證其“純潔性”:)JavaScript 標(biāo)準(zhǔn)文檔中定義:
[[Class]]的值只可能是下面字符串中的一個(gè):Arguments,Array,Boolean,Date,Error,Function,JSON,Math,Number,Object,RegExp,String。
-
typeof運(yùn)算符不能檢測(cè)數(shù)組 - ES5的
isArray函數(shù)是原生的檢測(cè)方法,IE8以下不支持 - 對(duì)象自身的
constructor屬性和instanceof操作符雖然也能檢測(cè)數(shù)組,但在frame中會(huì)有問(wèn)題 -
對(duì)象原生toString也能檢測(cè)數(shù)組
prototype.png
http://www.w3cplus.com/javascript/array-part-1.html
? w3cplus.com
