Javascript學習第四集

來源:互聯網
上載者:User

 

這章我們來探討javascript中的對象和數組。 

1 , for / in :
一種遍曆(枚舉)對象屬性的方法,可以迴圈我們呢事先不知道的屬性。
它可以枚舉處使用者定義的所有屬性,但卻不能枚舉出某些預定義的屬性和方法。
不能枚舉的屬性通常是繼承的屬性

刪除一個對象的屬性:
delete book.width ;
從對象中移除了屬性,在刪除之後,用for/in將不會枚舉該屬性,並且用width in book 也檢測不到該屬性。

for/in 的另一個重要的用途就是跟關聯陣列一起使用:
for(stoct in port ){
    value + = get_value(stoct) *   port[stoct] ;
}

2 , 通用的Object屬性和方法:
1):constructor屬性:
每個對象都有這個屬性,他引用了初始化這個對象的建構函式。
比如:
var d =new Date(); //使用Date()建構函式,建立一個對象 d;
   d.constructor ==Date;   //true    //屬性d.constructor引用 Date ;

這個屬性有助於確定一個對象的類型;
比如:
我們想確定一個值的類型是否是Date 類型:
If((typeof o==”object” )&& (o.constructor==Date)){
// 首先看是否是對象,然後看是否引用Date
}

上面的代碼也可以寫成:
If((typeof o==”object” )&& (o   instanceof   Date)){
// instanceof 運算子 來檢測o.constructor 屬性的值。
}

3 , toStirng()和toLocaleString()方法:
1):toLocaleStirng() 返回對象的一個本地化字串。
toString和toLocaleString一般都返回相同,但在子類中,有點區別:
比如:
Array , Date和Number都定義了返回本地化的值的toLocaleString()方法.

4 , hasOwnProperty()和propertyIsEnumerable()方法:
1):hasOwnProperty
var a = { x : 1 , y : 2};
var k =a.hasOwnProperty("x");
alert(k) //true
alert( Math.hasOwnProperty("z") );//false
alert( Math.hasOwnProperty("cos") );//true
註:Math,cos() : 以弧度為單位計算並返回指定角度的餘弦值。
propertyIsEnumerable()跟返回的結果跟hasOwnProperty()相同;

4 ,isPrototypeOf()方法:
如果方法所屬的對象是參數的原型對象。
var a = { x : 1 , y : 2};
var k1= Object.prototype.isPrototypeOf(a);       // o.constructor = Object
var k2= Object.prototype.isPrototypeOf(Function);   // Function.constructor = Object
alert(k1) //true
alert(k2) //true

5,數組:
1)建立數組:
數組直接量:
var es = [ ] ;
複雜點 var es = [ [ 1, {x:1   , y : 2}] , [ 2, {x:3 , y : 4}] ];
還有一種方式:使用Array() 建構函式:
    V1 : 無參數:
       var a = new Array();
空數組,和 var a =[ ] 相等 ;

   V2 : 多個參數:
     var a = new Array( 1,2,3,”tt”) ; //可以看出直接量定義 簡單些。

   V3 : 1個數字參數:
   var a = new Array (3);
具有3個元素的數組,每個元素的值為 undefined ;

6, 數組的下標(索引):
大小   : 0 <= 下標 < 2的32次方 – 1 ;
如果不在範圍內,js會講它轉換為一個字串,作為對象屬性的名稱;
而不是作為數組的下標;
比如:
   a[-1.2] = “test” ;   // 等價於   a[“-1.2”] =”test” ;
//代碼解釋: 建立一個名為 “-1.2”的屬性,而不是定義一個 新的數組元素。

7, 添加數組的記憶體使用量:
   a[10] = “test” ; //添加新的元素
記憶體的使用:
比如:
a[0] = “1” ;
a[10] =” 10” ;
那麼js值給下標為0 和10的元素分配記憶體,中間的9個元素不被分配;

註:數組也可以添加到對象中;
比如;
var a = new Circle(1,2,3);
a[0]= “test” ;
這個例子定義了一個名為” 0 “的新對象屬性。
只將數組元素添加到一個對象中並不會使它成為數組。

8, 刪除數組:
var a = [1,2];
delete a[0];
alert(a[0]) //輸出 undefined
alert(a[1]) //輸出 2
由例子可以看出,delete刪除其實沒有真正刪除,只不過把元素設定為undefined;

如果要真正刪除,可以使用Array.shift(),等方法。
比如:
var a = [1,2];
delete a[0];
alert(a[0]) //輸出 undefined
alert(a[1]) //輸出 2
a.shift(); //刪除數組的第一個元素
alert(a[0]) //輸出 2
alert("length:"+a.length);
alert(a[1]) //輸出 undefined ;   1已經被刪除了,其實數組已經的長度只有 1 了;

9,數組的length:
a[49] = “a”;
// 那麼這個數組的長度是 50 ;

length屬性經常用於遍曆數組元素;
比如:
   var a = [“a” , “b “ ,”c” ];
for(var i = 0 ; i< a.length ; i++){
alert(a[i]);
}

這個是在假定元素是連續的,如果不是這種情況:
必須檢測每個元素是否被定義 : 比如:
for(var i = 0 ; i< a.length ; i++){
if(a[i]){
alert(a[i]);
}
}

多維陣列: a[i][j] ;

10,數組的一些方法:
1):join() 方法:
把一個數組的所有元素都轉換成字串。
比如:var a = [1,2,3];
    var s =   a.join();   // 輸出 s==1,2,3
當然也可以 指定一個分隔字元;
比如;
   s = a.join(“,”);
這個方法跟String.split()相反, split()將一個字串分割成幾個片段來建立數組;

2):reverse () 方法:
把一個數組顛倒。
     var a   = new Array(1,2,3);
a.reverse();
var s = a.join(); //s == “3,2,1”

3):sort() 方法:
排序
♂:如果不給傳參數,那麼按照字母順序對數組元素排序。
var a = new Array(“ee”,”df”,”b”);
a.sort()
var s = a.join(“, ”); // s == “b, df, ee”
♂:如果傳參數:
比如:
var a = [33,4,1111,222]
a.sort(); // 排序 : 1111 ,222 ,33,4
a.sort(function(x,y){
       return x-y;
});
var s = a.join(); //輸出 4, 33,222,1111

//可以從例子看出,排序如果x > y ,那麼第一個參數就排在第2個參數後,
比如; 1111 ,222   -à     1111-222>0 -à 則 222 , 1111
另外注意下 字母排序:因為js是區分大小寫,所以排序的時候,把字元統一成大寫或者小寫,再排序。

4):concat() 方法:
var a = [1,2,3];
a= a.concat(4, [5,6],7);
a=a.join(); //輸出 1,2,3,4,5,6,7
alert(a)
注意:
如果是數組裡面還有數組 ,就不能展開了。
比如:
var a = [1,2,3];
a = a.concat(4,[5,[6,6]],7);
alert(a); //這個看不出來
a = a.join("|");
alert(a); //分割後,注意有個逗號

-------------------------------------

var c = [1,2,3];
var d =new Array(1,2,3);
alert(c); //1,2,3
alert(d); //1,2,3
//之所以不輸出Object ,是因為
//數組是一個具有額外功能層的對象.
//我們記住他的特殊性。

5):slice() 方法:
返回數組某一個片段。跟字串的substring方法類似。

6):splice() 方法:
首先他跟 slice 方法 只有一個字母的差別,不過用處完全不同。
他可以用來刪除。
var a = [1,2,3];
a = a.splice(0,2);
alert(a); // 輸出 1, 2
a = a.splice(1,2);
alert(a); // 輸出 2 。 如果是 a = a.splice(0 , 1) ; 輸出 1
a = a.splice(1,2);
alert(a); // 沒有刪除任何數組 , 輸出 空 數組

他也可以插入數組。具體方法:
    var array1 = new Array("1","2","3","4");
    array1.splice(1,0,"5");//在 第2個元素後面,插入 5 ; 如果第2個參數為0,則不刪除。
    document.write(array1+"<br>"); //輸出 1, 5 ,2 ,3,4
    array1.splice(2,3,"7","8") // 刪除 第3個的 元素後的 3個元素。也就是 第3個,第4個,第5個元素。然後在這個位置上插入7,8
    document.write(array1);//輸出 1, 5 ,7,8
注意:和concat()不同,splice並不將他插入的參數展開。也就是如果插入一個數組,他就是插入數組本身,還不是數組的元素。
而concat()插入數組的話,就會把數組展開,插入數組中的元素,不過當插入的數組裡
還有數組的時候,就不會展開了。


7):push() 方法和pop()方法:
push(): 將一個或者多個數組 附加到數組的尾部。
pop() : 刪除數組的最後一個元素。
var array1 = new Array("1","2","3","4");
    array1.push("5");
    document.write(array1+"<br>"); //輸出 1, 2 ,3 ,4,5
    array1.pop()
    document.write(array1);//輸出 1, 2 ,3 ,4

8):unshift() 方法和shift ()方法:
跟push和pop唱反調。。。
unshift (): 將一個或者多個數組 附加到數組的頭部。
shift ():刪除數組的第一個元素。

數組的一些方法是比較多,看起來也比較煩。所以大家應該有點耐心啊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.