JavaScript中數(shù)組對(duì)象詳解
Array對(duì)象即數(shù)組對(duì)象用于在單個(gè)變量中存儲(chǔ)多個(gè)值,JS的數(shù)組是弱類型的,所以允許數(shù)組中含有不同類型的元素,數(shù)組元素甚至可以是對(duì)象或者其他數(shù)組。
創(chuàng)建數(shù)組的語(yǔ)法1、Array構(gòu)造器
1、var list=new Array();2、var list=new Array(size);3、var list=new Array(element0,element1,...elementn);
2、字面量的方式
var Array[element0,element1,...elementn];
舉例子
var list=new Array(1,true,null,undefined,{x:1},[1,2,3]);
var list[1,true,null,undefined,{x:1},[1,2,3]]; 數(shù)組的分類
1、二維數(shù)組,二維數(shù)組的本質(zhì)是數(shù)組中的元素又是數(shù)組。
var arr = [[1,2],[a,b]];alert(arr[1][0]); //a 第2列第1行所在的元素
2、稀疏數(shù)組
稀疏數(shù)組是包含從0開始的不連續(xù)索引的數(shù)組。在稀疏數(shù)組中一般length屬性值比實(shí)際元素個(gè)數(shù)大(不常見)
舉例
var a=['a',,'b',,,,'c',,];
數(shù)組對(duì)象屬性 屬性 作用length 屬性 表示數(shù)組的長(zhǎng)度,即其中元素的個(gè)數(shù)prototype 屬性 返回對(duì)象類型原型的引用constructor 屬性 表示創(chuàng)建對(duì)象的函數(shù)1、length 屬性
通過一些操作來講解length屬性
var arr=[1,2,3,4,5,6,7,8,9,10]; //定義了一個(gè)包含10個(gè)數(shù)字的數(shù)組。
數(shù)組的長(zhǎng)度屬性是可變的
alert(arr.length); //顯示數(shù)組的長(zhǎng)度10arr.length=15; //增大數(shù)組的長(zhǎng)度,length屬性是可變的alert(arr.length); //顯示數(shù)組的長(zhǎng)度已經(jīng)變?yōu)?5
訪問數(shù)組元素
alert(arr[3]); //顯示第4個(gè)元素的值,為4
減小數(shù)組長(zhǎng)度
arr.length=2; //將數(shù)組的長(zhǎng)度減少到2,數(shù)組中的元素只剩下索引值小于2的元素alert(arr[9]); //這時(shí)候顯示第10個(gè)元素已經(jīng)變?yōu)?undefined'因?yàn)樗饕荡笥诘扔?的元素都被拋棄了
恢復(fù)數(shù)組長(zhǎng)度
arr.length=10; //將數(shù)組長(zhǎng)度恢復(fù)為10alert(arr[9]); //長(zhǎng)度恢復(fù)之后已經(jīng)拋棄的元素卻無法收回,顯示'undefined'
2、prototype 屬性
prototype 屬性返回對(duì)象類型原型的引用。 prototype 屬性是 object 共有的。
objectName.prototype
objectName 參數(shù)是 object 對(duì)象的名稱。
說明:用 prototype 屬性提供對(duì)象的類的一組基本功能。 對(duì)象的新實(shí)例“繼承”賦予該對(duì)象原型的操作。
對(duì)于數(shù)組對(duì)象,用以下例子說明prototype 屬性的用途。
給數(shù)組對(duì)象添加返回?cái)?shù)組中最大元素值的方法。要完成這一點(diǎn),聲明一個(gè)函數(shù),將它加入 Array.prototype, 并使用它。
function array_max( ){ var i, max = this[0]; for (i = 1; i < this.length; i++) { if (max < this[i]) max = this[i]; } return max;}Array.prototype.max = array_max;var x = new Array(1, 2, 3, 4, 5, 6);var y = x.max( );
該代碼執(zhí)行后,y 保存數(shù)組 x 中的最大值,或說 6。
3、constructor 屬性
constructor 屬性表示創(chuàng)建對(duì)象的函數(shù)。
object.constructor //object 是對(duì)象或函數(shù)的名稱。
說明: constructor 屬性是所有具有 prototype 的對(duì)象的成員。它們包括除 Global 和 Math 對(duì)象以外的所有 JScript 固有對(duì)象。 constructor 屬性保存了對(duì)構(gòu)造特定對(duì)象實(shí)例的函數(shù)的引用。
例如:
x = new String('Hi');if (x.constructor == String) // 進(jìn)行處理(條件為真)。//或function MyFunc {// 函數(shù)體。}y = new MyFunc;if (y.constructor == MyFunc) // 進(jìn)行處理(條件為真)。
對(duì)于數(shù)組來說:
y = new Array(); Array的對(duì)象方法
說明:部分是ECMAScript5的新特性(IE678不支持)
方法 作用concat() 連接兩個(gè)或者更多的數(shù)組,并返回結(jié)果join() 將數(shù)組的元素組起一個(gè)字符串pop() 刪除并返回?cái)?shù)組的最后一個(gè)元素push() 數(shù)組末尾添加一個(gè)或者多個(gè)元素,返回新的長(zhǎng)度reverse 顛倒數(shù)組中元素的順序shift() 刪除并返回?cái)?shù)組的第一個(gè)元素slice() 從某個(gè)已有的數(shù)組返回選定的元素sort() 對(duì)數(shù)組元素排序splice() 刪除元素,并向數(shù)組添加新元素toSource() 返回該對(duì)象的源代碼toString() 把數(shù)組轉(zhuǎn)化為字符串并返回結(jié)果toLocalString() 把數(shù)組轉(zhuǎn)化為本地元素并返回結(jié)果unshift 向數(shù)組開頭添加一個(gè)或者更多的元素,并返回新的長(zhǎng)度valueof() 返回?cái)?shù)組對(duì)象的原始值forEach() 遍歷數(shù)組對(duì)象map() 對(duì)數(shù)組做一些映射filter() 過濾every() 檢查判斷some() 檢查判斷reduce() 兩兩執(zhí)行一定的操作reduceRight() 從右到左執(zhí)行操作indexOf() 數(shù)組檢索查找某個(gè)元素Array.isArray([]) 判斷是否是數(shù)組主要對(duì)一些新特性進(jìn)行講解
concat
concat作用是拼接數(shù)組,需要注意的是也可以把一個(gè)數(shù)組元素作為拼接的元素,如果這樣的話,數(shù)組會(huì)被拉平,再和其它的元素拼接起來成為新的數(shù)組,但是不會(huì)被拉平兩次,concat不會(huì)修改原數(shù)組。
例如
var arr=[1,2,3,4,5];arr.concat([10,11],13);//[1,2,3,4,5,10,11,13]arr.concat([1,[2,3]]);//[1,2,3,4,5,1,[1,3]]
slice
slice(a,b)a和b可以取負(fù)數(shù),表示從a位置開始截取到b位置的一段數(shù)組,是一個(gè)左閉右開的區(qū)間,a和b可以取負(fù)數(shù),如果是負(fù)數(shù)代表倒數(shù)第a/b個(gè)元素
var arr=[1,2,3,4,5];arr.slice(1,3);//[2,3]arr.slice(1);//[2,3,4,5]arr.slice(1,-1);//[2,3,4]arr.slice(-4,-3);//[2]
splice
splice刪除元素并向數(shù)組添加新元素
object.splice(a) 從左邊開始刪除a個(gè)元素
object.splice(a,b) 從a位置開始截取其中的b個(gè)元素
object.splice(a,b,c,d) 從a位置開始截取b個(gè)元素,并將c和d或者更多的元素插入原數(shù)組
需要注意的是splice會(huì)修改原數(shù)組
var arr=[1,2,3,4,5];arr.splice(2);//[3,4,5]arr;//[1,2];原數(shù)組被修改了var arr=[1,2,3,4,5];arr.splice(2,2);//[3,4]arr;//[1,2,5];var arr=[1,2,3,4,5];arr.splice(1,1,‘a(chǎn)’,‘b’);//[2]arr;//[1,'a','b',3,4,5];
foreach
foreach()函數(shù)從頭到尾把數(shù)組遍歷一遍。有三個(gè)參數(shù)分別是:數(shù)組元素,元素的索引,數(shù)組本身
var arr = [1, 2, 3, 4, 5];arr.forEach(function(x, index, a){//分別對(duì)應(yīng):數(shù)組元素,元素的索引,數(shù)組本身 console.log(x + ’|’ + index + ’|’ + (a === arr));});// 1|0|true// 2|1|true// 3|2|true// 4|3|true// 5|4|true
說明:如果只有一個(gè)參數(shù)那這個(gè)參數(shù)代表數(shù)組元素,也就是數(shù)組的值,請(qǐng)看例2。
例2var data=[1,2,3,4,5,6];var sum=0;data.forEach(function(v){//其中的v就是數(shù)組的值 123456sum+=v;})document.write(sum+'<br>');//打印出來是21
map
map 對(duì)數(shù)組做一些映射,map() 方法返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組,它與forEach的區(qū)別是forEach為數(shù)組中的每個(gè)元素執(zhí)行一次回調(diào)函數(shù)。
var arr = [1, 2, 3];arr.map(function(x) { return x + 10;}); // [11, 12, 13]arr; // [1, 2, 3]
filter
filter 過濾掉某些元素,和map有點(diǎn)類似,Array的filter也接收一個(gè)函數(shù)。但是和map不同的是, filter把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是 true 還是false決定保留還是丟棄該元素,也就是過濾掉不符合要求的某些元素。
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];arr.filter(function(x, index) { return index % 3 === 0 || x >= 8;}); // returns [1, 4, 7, 8, 9, 10]arr; // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
every()與some()
every()與some()方法都是JS中數(shù)組的迭代方法。every()是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)返回true,則返回true。some()是對(duì)數(shù)組中每一項(xiàng)運(yùn)行指定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true。
總結(jié)就是every()當(dāng)每個(gè)元素都符合條件的時(shí)候返回true,而some()是任一項(xiàng)滿足條件就返回true
例1 every()var arr = [1, 2, 3, 4, 5];arr.every(function(x) { return x < 10;}); // truearr.every(function(x) { return x < 3;}); // false
some只需要有一個(gè)符合的就行
例2 somevar arr = [1, 2, 3, 4, 5];arr.some(function(x) { return x === 3;}); // truearr.some(function(x) { return x === 100;}); // false
reduce()
Array的reduce()把一個(gè)函數(shù)作用在這個(gè)Array的[x1, x2, x3...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce()把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
var arr = [1, 2, 3];var sum = arr.reduce(function(x, y) { return x + y}, 0); //參數(shù) 0是可選的,如果寫了參數(shù)0那第一次傳遞的兩個(gè)值就是0和1如果不寫第一次傳遞的就是數(shù)組的前兩個(gè)值,計(jì)算結(jié)果是6arr; //[1, 2, 3]arr = [3, 9, 6];var max = arr.reduce(function(x, y) { console.log(x + '|' + y); return x > y ? x : y;});// 3|9// 9|6max; // 9
reduceRight
和reduce一樣只不過reduceRight 變成了從右到左兩兩執(zhí)行某些操作
max = arr.reduceRight(function(x, y) { console.log(x + '|' + y); return x > y ? x : y;});// 6|9// 9|3max; // 9
indexOf()
indexOf() 方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置,indexOf(a,b)表示查找a元素,從b位置開始;lastindexOf表示從右向左找。當(dāng)b為負(fù)數(shù)的時(shí)候表示從倒數(shù)第幾個(gè)元素開始找,請(qǐng)看例子。
var arr = [1, 2, 3, 2, 1];arr.indexOf(2); // 1arr.indexOf(99); // -1表示沒有這個(gè)元素arr.indexOf(1, 1); // 4arr.indexOf(1, -3); // 4查找1從倒數(shù)第3個(gè)元素開始arr.indexOf(2, -1); // -1查找2從倒數(shù)第1個(gè)元素開始arr.lastIndexOf(2); // 3從右邊開始找第一次出現(xiàn)2的位置arr.lastIndexOf(2, -2); // 3從右邊的倒數(shù)第二個(gè)開始找2出現(xiàn)的位置arr.lastIndexOf(2, -3); // 1
isArray
isArray用來判斷是否是數(shù)組,但是isArray是Array構(gòu)造器對(duì)象上的屬性,所以不能直接用isArray,必須要寫成Array.isArray([]),但是可以其它的判斷方法直接判斷
[]instanceof Array;//true({}).toString.apply([])===’[object Array]’;//true[].construcror===Array;//true
數(shù)組和一般對(duì)象的比較
數(shù)組 / 一般對(duì)象相同點(diǎn) 都可以繼承,對(duì)象不一定是數(shù)組,都可以當(dāng)做對(duì)象添加屬性不同點(diǎn) 數(shù)組自動(dòng)更新length按索引訪問數(shù)組比訪問一般對(duì)象屬性明顯迅速。數(shù)組對(duì)象繼承Array.prototype上的大量數(shù)組操作方法數(shù)組和字符串的比較
數(shù)組 /字符串相同點(diǎn) 字符串是數(shù)組的一種不同點(diǎn) 字符串是不可變的數(shù)組,字符串沒有數(shù)組的方法來自:http://www.jianshu.com/p/fd8c73d2cf2c
相關(guān)文章:
1. IntelliJ IDEA設(shè)置自動(dòng)提示功能快捷鍵的方法2. 通過Django Admin+HttpRunner1.5.6實(shí)現(xiàn)簡(jiǎn)易接口測(cè)試平臺(tái)3. Docker 部署 Prometheus的安裝詳細(xì)教程4. IntelliJ IDEA安裝插件的方法步驟5. idea重置默認(rèn)配置的方法步驟6. idea導(dǎo)入maven項(xiàng)目的方法7. php過濾器使用詳解8. idea給項(xiàng)目打war包的方法步驟9. idea打開多個(gè)窗口的操作方法10. IntelliJ IDEA調(diào)整字體大小的方法

網(wǎng)公網(wǎng)安備