最愛(ài)Java

          書山有路勤為徑,學(xué)海無(wú)涯苦作舟

          javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(二)

                  本文轉(zhuǎn)載于javaeye(http://www.javaeye.com/wiki/Object_Oriented_JavaScript/1279-javascript-object-oriented-technology-one),只進(jìn)行了重新排版以便收藏。
                  文中所有英文語(yǔ)句(程序語(yǔ)句除外),都引自<<javascript-the definitive guide,5th edition>>。

          ------------------------------------------------------------------------------------
          數(shù)組
                  我們已經(jīng)提到過(guò),對(duì)象是無(wú)序數(shù)據(jù)的集合,而數(shù)組則是有序數(shù)據(jù)的集合,數(shù)組中的數(shù)據(jù)(元素)通過(guò)索引(從0開始)來(lái)訪問(wèn),數(shù)組中的數(shù)據(jù)可以是任何的數(shù)據(jù)類型。數(shù)組本身仍舊是對(duì)象,但是由于數(shù)組的很多特性,通常情況下把數(shù)組和對(duì)象區(qū)別開來(lái)分別對(duì)待(Throughout this book, objects and arrays are often treated as distinct datatypes.  This is a useful and reasonable simplification; you can treat objects and arrays as separate types for most of your JavaScript programming.To fully understand the behavior of objects and arrays, however, you have to know the truth: an array is nothing more than an object with a thin layer of extra functionality. You can see this with the typeof operator: applied to an array value, it returns the string "object".  --section7.5).
                  創(chuàng)建數(shù)組可以用"[]"操作符,或者是用Array()構(gòu)造函數(shù)來(lái)new一個(gè)。

          1var array1 = [];  //創(chuàng)建空數(shù)組   
          2var array2 = new Array();  //創(chuàng)建空數(shù)組   
          3array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //   
          4alert(array1[2][1]);  //4   訪問(wèn)數(shù)組中的數(shù)組元素   
          5alert(array1[3].name1); //NAME1 訪問(wèn)數(shù)組中的對(duì)象   
          6alert(array1[8]);   //undefined   
          7array2 = [,,];  //沒(méi)有數(shù)值填入只有逗號(hào),則對(duì)應(yīng)索引處的元素為undefined   
          8alert(array2.length); //3   
          9alert(array2[1]);     //undefined

                  用new Array()來(lái)創(chuàng)建數(shù)組時(shí),可以指定一個(gè)默認(rèn)的大小,其中的值此時(shí)為undefined,以后可以再給他們賦值.但是由于javascript中的數(shù)組的長(zhǎng)度是可以任意改變的,同時(shí)數(shù)組中的內(nèi)容也是可以任意改變的,因此這個(gè)初始化的長(zhǎng)度實(shí)際上對(duì)數(shù)組沒(méi)有任何的約束力。對(duì)于一個(gè)數(shù)組,如果對(duì)超過(guò)它最大長(zhǎng)度的索引賦值,則會(huì)改變數(shù)組的長(zhǎng)度,同時(shí)會(huì)對(duì)沒(méi)有賦值
          的索引處賦值undefined,看下面的例子:

          1var array = new Array(10);   
          2alert(array.length);   //10   
          3alert(array[4]);       //undefined   
          4array[100= "100th";  //這個(gè)操作會(huì)改變數(shù)組的長(zhǎng)度,同時(shí)將10-99索引對(duì)應(yīng)的值設(shè)為undefined   
          5alert(array.length);   //101   
          6alert(array[87]);      //undefined  

                   可以用delete操作符刪除數(shù)組的元素,注意這個(gè)刪除僅僅是將數(shù)組在該位置的元素設(shè)為undefined,數(shù)組的長(zhǎng)度并沒(méi)有改變。我們已經(jīng)使用過(guò)了數(shù)組的length屬性,length屬性是一個(gè)可以讀/寫的屬性,也就是說(shuō)我們可以通過(guò)改變數(shù)組的length屬性來(lái)任意的改變數(shù)組的長(zhǎng)度。如果將length設(shè)為小于數(shù)組長(zhǎng)度的值,則原數(shù)組中索引大于length-1的值都會(huì)被刪除。如果length的值大于原始數(shù)組的長(zhǎng)度,則在它們之間的值設(shè)為undefined。

           1var array = new Array("n1","n2","n3","n4","n5");  //五個(gè)元素的數(shù)組   
           2var astring = "";   
           3for(var i=0; i<array.length; i++{           //循環(huán)數(shù)組元素   
           4    astring += array[i];   
           5}
             
           6alert(astring);       //n1n2n3n4n5   
           7delete array[3];                   //刪除數(shù)組元素的值   
           8alert(array.length + "_" + array[3])  //5_undefined   
           9  
          10array.length = 3;    //縮減數(shù)組的長(zhǎng)度   
          11alert(array[3]);     //undefined   
          12array.length = 8;    //擴(kuò)充數(shù)組的長(zhǎng)度   
          13alert(array[4]);     //undefined  

                  對(duì)于數(shù)組的其他方法諸如join/reverse等等,在這就不再一一舉例。

                  通過(guò)上面的解釋,我們已經(jīng)知道,對(duì)象的屬性值是通過(guò)屬性的名字(字符串類型)來(lái)獲取,而數(shù)組的元素是通過(guò)索引(整數(shù)型 0~~2**32-1)來(lái)得到值。數(shù)組本身也是一個(gè)對(duì)象,所以對(duì)象屬性的操作也完全適合于數(shù)組。

          1var array = new Array("no1","no2");   
          2array["po"= "props1";   
          3alert(array.length);   //2   
          4//對(duì)于數(shù)組來(lái)說(shuō),array[0]同array["0"]效果是一樣的(?不確定,測(cè)試時(shí)如此)   
          5alert(array[0+ "_" + array["1"+ "_" + array.po);//no1_no2_props1  

          posted on 2009-10-20 10:46 Brian 閱讀(319) 評(píng)論(2)  編輯  收藏 所屬分類: JScript

          評(píng)論

          # re: javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(二) 2013-10-22 17:16 zx

          rtwtwatwatst  回復(fù)  更多評(píng)論   

          # re: javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(二) 2013-10-22 17:18 cxs

          @zx
          什么意思?  回復(fù)  更多評(píng)論   

          公告


          導(dǎo)航

          <2013年10月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 启东市| 永丰县| 山阴县| 临海市| 繁昌县| 昭通市| 庐江县| 长垣县| 高台县| 东海县| 宁波市| 萨嘎县| 靖江市| 乌兰察布市| 安徽省| 庆云县| 阜南县| 济宁市| 双柏县| 平果县| 南溪县| 柯坪县| 大同县| 成都市| 始兴县| 安仁县| 海伦市| 玉树县| 全州县| 体育| 青铜峡市| 十堰市| 聂拉木县| 上思县| 日喀则市| 崇义县| 简阳市| 酉阳| 喀什市| 额济纳旗| 镇坪县|