js 數組

-
-
最近用到了Array就對其進行一個整理,文中內容閱讀他人文章摘錄加自己實驗操作所的,並非完全原創。

數組對象的3個屬性
1、length 屬性

length 屬性
    Length屬性表示數組的長度,即其中元素的個數。因爲數組的索引總是由0開始,所以一個數組的上下限分別是:0和length - 1 。 和其他大多數語言不同的是,JavaScript數組的length屬性是可變的,這一點需要特別注意。當length屬性被設置得更大時,整個數組的狀 態事實上不會發生變化,僅僅是length屬性變大;當length屬性被設置得比原來小時,則原先數組中索引大於或等於length的元素的值全部被丟 失。下面是演示改變length屬性的例子:

var  arr = [ 12 , 23 , 5 , 3 , 25 , 98 , 76 , 54 , 56 , 76 ]; // 定義了一個包含10個數字的數組
alert(arr.length);  // 顯示數組的長度10
arr.length = 12 // 增大數組的長度
alert(arr.length);  // 顯示數組的長度已經變爲12
alert(arr[ 8 ]);  // 顯示第9個元素的值,爲56
arr.length = 5 // 將數組的長度減少到5,索引等於或超過5的元素被丟棄
alert(arr[ 8 ]);  // 顯示第9個元素已經變爲"undefined"
arr.length = 10 // 將數組長度恢復爲10
alert(arr[ 8 ]);  // 雖然長度被恢復爲10,但第9個元素卻無法收回,顯示"undefined"

    由 上面的代碼我們可以清楚的看到length屬性的性質。但length對象不僅可以顯式的設置,它也有可能被隱式修改。JavaScript中可以使用一 個未聲明過的變量,同樣,也可以使用一個未定義的數組元素(指索引超過或等於length的元素),這時,length屬性的值將被設置爲所使用元素索引 的值加1。例如下面的代碼:

var  arr = [ 12 , 23 , 5 , 3 , 25 , 98 , 76 , 54 , 56 , 76 ]; // 定義了一個包含10個數字的數組
alert(arr.length); // 顯示10
arr[ 15 ] = 34 ;
alert(arr.length);
// 顯示16

    代碼中同樣是先定義了一個包含10個數字的數組,通過alert語句可以看出其長度爲10。隨後使用了索引爲15的元素,將其賦值爲15,即arr[
15 ] = 34 ,這時再用alert語句輸出數組的長度,得到的是16。無論如何,對於習慣於強類型編程的開發人員來說,這是一個很令人驚訝的特性。事實上,使用new Array()形式創建的數組,其初始長度就是爲0,正是對其中未定義元素的操作,才使數組的長度發生變化。

    由上面的介紹可以看到,length屬性是如此的神奇,利用它可以方便的增加或者減少數組的容量。因此對length屬性的深入瞭解,有助於在開發過程中靈活運用。

2、prototype 屬性

prototype 屬性
返回對象類型原型的引用。prototype 屬性是 object 共有的。

objectName.prototype

objectName 參數是object對象的名稱。

說明:用 prototype 屬性提供對象的類的一組基本功能。 對象的新實例“繼承”賦予該對象原型的操作。

    對於數組對象,以以下例子說明prototype 屬性的用途。

    給數組對象添加返回數組中最大元素值的方法。要完成這一點,聲明一個函數,將它加入 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( );

該代碼執行後,y 保存數組 x 中的最大值,或說 
6

 

3、constructor 屬性

constructor 屬性
表示創建對象的函數。

object.constructor 
// object是對象或函數的名稱。

說明:constructor 屬性是所有具有 prototype 的對象的成員。它們包括除 Global 和 Math 對象以外的所有 JScript 固有對象。constructor 屬性保存了對構造特定對象實例的函數的引用。

例如:

=   new  String( " Hi " );
if  (x.constructor  ==  String)  //  進行處理(條件爲真)。
//

function  MyFunc {
 
//  函數體。
}

=   new  MyFunc;
if  (y.constructor  ==  MyFunc)  //  進行處理(條件爲真)。

對於數組來說:
=   new  Array();

 

數組對象的8個分類及多個方法

1.數組的創建

var  arrayObj  =   new  Array();  // 創建一個默認數組,長度是0
var  arrayObj  =   new  Array(size);  // 創建一個size長度的數組,注意Array的長度是可變的,所以不是上限,是長度
var  arrayObj  =   new  Array(item1,item2, );  // 創建一個數組並賦初值

要說明的是,雖然第二種方法創建數組指定了長度,但實際上所有情況下數組都是變長的,也就是說即使指定了長度爲5,仍然可以將元素存儲在規定長度以外的,注意:這時長度會隨之改變。
2、數組的元素的訪問

var  ArrayItemValue = arrayObj[ 1 ];  // 獲取數組的元素值
arrayObj[ 1 ] =   " 要賦予新值 " // 給數組元素賦予新的值

3、數組元素的添加

  arrayObj.push(item1,item2,...);// 將參數添加到數組結尾,並返回數組新長度
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
a.push(
6 , 7 );  // a結果就是:[1,2,3,4,5,6,7]

  arrayObj.unshift(item1,item2,...);// 將參數添加到數組開始,數組中的元素自動後移,返回數組新長度
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
a.unshift(
- 2 , - 1 );  // a結果就是:[-2,-1,1,2,3,4,5]

  arrayObj.splice(start,deleteCount,item1,item2,...);// 從下標start位置開始刪除deleteCount個元素,並從該位置起插入item1,item2,...,插入位置及之後的元素自動後移,方法返回 被刪除的項。
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
var  b  =  a.splice( 2 , 2 , 7 , 8 , 9 );  // a結果就是:[1,2,7,8,9,5],b結果就是5:[3,4]

另外注意:

var  b  =  a.splice( 0 , 1 );  // 等同shift()方法
a.splice( 0 , 0 , - 2 , - 1 );  var  b  =  a.length;  // 等同unshift()方法
var  b  =  a.splice(a.length - 1 , 1 );  // 等同pop()方法
a.splice(a.length, 0 , 6 , 7 );  // 等同push()方法

4、數組元素的刪除

  arrayObj.pop(); //刪除原數組最後一項;
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
a.pop(); 
// a結果就是:[1,2,3,4]

  arrayObj.shift(); //移除最前一個元素並返回該元素值,數組中元素自動前移
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ];
a.shift(); 
// a結果就是:[2,3,4,5]

  arrayObj.splice(start,deleteCount); //從下標start位置的刪除deleteCount個的元素,方法以數組形式返回所移除的元素
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ];
var  b  =  a.shift( 0 , 2 );  // a結果就是:[3,4,5],b結果就是:[1,2]

5、數組的截取和合並

  arrayObj.slice(start[,end]); //返回從原數組中從start下標開始到 end-1 下標之間的項組成的新數組,如果end不填寫則返回start下標開始之後的全部元素。
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ];
var  b  =  a.slice( 1 , 3 );  // a結果就是:[1,2,3,4,5],b結果就是:[2,3]
var  b  =  a.slice( 1 );  // a結果就是:[1,2,3,4,5],b結果就是:[2,3,4,5]

  arrayObj.concat(item1,item2,...); //返回一個新數組,新數組是將參數添加到原數組中構成的,而原數組不變
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
var  b  =  a.concat( 6 , 7 );  // a結果就是:[1,2,3,4,5],b結果就是:[1,2,3,4,5,6,7]

6、數組的拷貝

arrayObj.slice( 0 );  // 返回數組的拷貝數組,注意是一個新的數組,不是指向
arrayObj.concat();  // 返回數組的拷貝數組,注意是一個新的數組,不是指向

7、數組元素的排序

  arrayObj.reverse(); //將數組反序,返回反序後的數組地址
例:

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
var  b  =  a.reverse();  // a結果就是:[5,4,3,2,1],b結果就是:[5,4,3,2,1]
//
注意,這裏返回的是數組地址,並非數組的拷貝,反序了之後如果原數組改變了,那麼反序的數組也隨便之改變
//
在此之上再做如下操作
a.pop();  // a結果就是:[5,4,3,2],b結果就是:[5,4,3,2]
//
或者
b.pop();  // a結果就是:[5,4,3,2],b結果就是:[5,4,3,2]

  arrayObj.sort([orderfunction]); //對按指定的參數數組元素排序,返回排序後的數組地址
例:

// 在arrayObj.reverse()例子中繼續做sort()
a.sort();  // a結果就是:[2,3,4,5],b結果就是:[2,3,4,5]

要注意的是,在具體的數組中可以按照orderfunction參數指定的方法進行排序。

8、數組元素的字符串化

  arrayObj.join(separator); //將數組的元素連接在一起組成一個字符串,以separator爲分隔符,省略的話則用默認用逗號爲分隔符。

var  a  =  [ 1 , 2 , 3 , 4 , 5 ]; 
var  b  =  a.join( " | " );  // a結果就是:[1,2,3,4,5],b結果就是:"1|2|3|4|5"

toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章