<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • javascript學(xué)習(xí)筆記--數(shù)組和對象

    時間:2024-10-16 16:40:02 JavaScript 我要投稿
    • 相關(guān)推薦

    javascript學(xué)習(xí)筆記--數(shù)組和對象

      javascript對象部分

    javascript學(xué)習(xí)筆記--數(shù)組和對象

      一:基礎(chǔ)部分

      1.JavaScript 中所有變量都是對象,除了兩個例外 null 和 undefined。

      2.Jscript 支持四種類型的對象:內(nèi)部對象、生成的對象、宿主給出的對象(所有BOM和DOM對象都是宿主對象。)以及 ActiveX 對象(外部組件)。

      3.Microsoft Jscript 提供了 11 個內(nèi)部(或“內(nèi)置”)對象。它們是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error 以及 String 對象。

      4.對象只是一種特殊的數(shù)據(jù)。對象擁有屬性和方法。 JavaScript 是面向?qū)ο蟮恼Z言,但 JavaScript 不使用類。 JavaScript 基于 prototype,而不是基于類的。

      5.屬性:是隸屬于某個特定對象的變量。方法:是只有某個特定對象才能調(diào)用的函數(shù)。

      6.Jscript 對象是屬性和方法的集合。一個方法就是一個函數(shù),是對象的成員。屬性是一個值或一組值(以數(shù)組或?qū)ο蟮男问剑菍ο蟮某蓡T。

      7.javascript對象是基于構(gòu)造器函數(shù)的,使用構(gòu)造器函數(shù)創(chuàng)建一個新對象時,就可以說是實(shí)例化了一個新對象。屬性是構(gòu)造器函數(shù)內(nèi)部的變量。

      使用構(gòu)造器函數(shù)實(shí)例化的對象:

      cat = new Animal();

      8.Javascript是一種基于對象(object-based)的語言,你遇到的所有東西幾乎都是對象。但是,它又不是一種真正的面向?qū)ο缶幊蹋∣OP)語言,因?yàn)樗恼Z法中沒有class(類)。

      復(fù)制代碼 代碼如下:

      

      復(fù)制代碼 代碼如下:

      //通過點(diǎn)號(.)或“[]”來訪問對象的屬性

      browser.name //"Firefox"

      browser["kernel"] //"Gecko"

      對象(objct)是屬性(property)的集合,每個屬性都由“名/值對”構(gòu)成,js同樣定義了一個特殊的對象——數(shù)組,它是帶有編號的值的有序集合。js還定義了一個特殊的對象——函數(shù),函數(shù)是具有與他相關(guān)聯(lián)的可執(zhí)行代碼的對象,通過調(diào)用函數(shù)來執(zhí)行代碼,并返回運(yùn)算結(jié)果。

      理清概念:

      JS中"基于對象=面向?qū)ο?quot;4.JS中沒有類(Class),但是它取了一個新的名字叫“原型對象”,因此"類=原型對象"

      二:類(原型對象)和對象(實(shí)例)的區(qū)別與聯(lián)系###

      1.類(原型對象)是抽象,是概念的,代表一類事物。

      2.對象是具體的,實(shí)際的,代表一個具體的事物。

      3.類(原型對象)是對象實(shí)例的模板,對象實(shí)例是類的一個個體。

      一個常見的誤解是數(shù)字的字面值(literal)不是對象。這是因?yàn)?JavaScript 解析器的一個錯誤,它試圖將點(diǎn)操作符解析為浮點(diǎn)數(shù)字面值的一部分。

      有很多變通方法可以讓數(shù)字的字面值看起來像對象。

      2..toString(); // 第二個點(diǎn)號可以正常解析

      2 .toString(); // 注意點(diǎn)號前面的空格

      (2).toString(); // 2先被計算

      刪除屬性

      刪除屬性的唯一方法是使用 操作符;設(shè)置屬性為 undefined 或者 null 并不能真正的刪除屬性,而僅僅是移除了屬性和值的關(guān)聯(lián)。

      JavaScript面向?qū)ο笕筇卣?/p>

      封裝:不考慮內(nèi)部實(shí)現(xiàn),只考慮功能使用

      繼承:從已有對象上,繼承出新的對象

      多態(tài):所謂多態(tài),就是指一個引用在不同情況下的多種狀態(tài),

      1.封裝

      封裝就是要把屬于同一類事物的共性(包括屬性與行為)歸到一個類中,以方便使用.比如人這個東東,可用下面的方式封裝:

      人{(lán)

      年齡(屬性一)

      身高(屬性二)

      性別(屬性三)

      做事(行為之一)

      走路(行為之二)

      說話(行為之三)

      }

      封裝的好處:

      封裝保護(hù)了內(nèi)部數(shù)據(jù)的完整性;

      封裝使對象的重構(gòu)更輕松;

      弱化模塊間的耦合,提高對象的可重用性;

      有助于避免命名空間沖突;

      看下面一個例子:

      復(fù)制代碼 代碼如下:

      

      這就是最簡單的封裝了,把兩個屬性封裝在一個對象里面。但是,這樣的寫法有兩個缺點(diǎn),一是如果多生成幾個實(shí)例,寫起來就非常麻煩;二是實(shí)例與原型之間,沒有任何辦法,可以看出有什么聯(lián)系。

      構(gòu)造函數(shù)模式

      為了解決從原型對象生成實(shí)例的問題,Javascript提供了一個構(gòu)造函數(shù)(Constructor)模式。

      所謂"構(gòu)造函數(shù)",其實(shí)就是一個普通函數(shù),但是內(nèi)部使用了this變量。對構(gòu)造函數(shù)使用new運(yùn)算符,就能生成實(shí)例,并且this變量會綁定在實(shí)例對象上。

      比如boy和girl的原型對象現(xiàn)在就可以這樣寫:

      復(fù)制代碼 代碼如下:

      

      我們現(xiàn)在就可以生成實(shí)例對象了。

      復(fù)制代碼 代碼如下:

      

      這時Boy和girl會自動含有一個constructor屬性,指向它們的構(gòu)造函數(shù)。

      復(fù)制代碼 代碼如下:

      alert(boy.constructor == Person); //true

      alert(girl.constructor == Person); //true

      Prototype模式 Javascript規(guī)定,每一個構(gòu)造函數(shù)都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構(gòu)造函數(shù)的實(shí)例繼承。

      這意味著,我們可以把那些不變的屬性和方法,直接定義在prototype對象上。

      復(fù)制代碼 代碼如下:

      

      然后,生成實(shí)例:

      復(fù)制代碼 代碼如下:

      

      這時所有實(shí)例的type屬性和eat()方法,其實(shí)都是同一個內(nèi)存地址,指向prototype對象,因此就提高了運(yùn)行效率。

      alert(boy.eat == girl.eat); //true

      原型屬性是一個內(nèi)置屬性,它指定了對象所擴(kuò)展的構(gòu)造器函數(shù)。

      下面的代碼為Animal構(gòu)造器函數(shù)添加一個新的屬性size,這個新屬性是cat對象的原型屬性。通過使用原型屬性,所有擴(kuò)展Animal構(gòu)造器函數(shù)的對象就可以訪問size屬性

      cat = new Animal("feline","meow", "walk/run");

      cat.prototype.size = "fat";

      在這種情況下,所有的Animal對象的size屬性都是“fat”。原型默認(rèn)為Object的新實(shí)例, 由于仍是對象, 故可以給該對象添加新的屬性。就好像style是javascript的一個對象一樣,也可以往style后繼續(xù)添加屬性。

      復(fù)制代碼 代碼如下:

      

      對象在查找某個屬性的時候,會首先遍歷自身的屬性,如果沒有則會繼續(xù)查找[[Prototype]]引用的對象,如果再沒有則繼續(xù)查找[[Prototype]].[[Prototype]]引用的對象,依次類推,直到[[Prototype]].….[[Prototype]]為undefined(Object的[[Prototype]]就是undefined)

      簡單說就是通過對象的[[Prototype]]保存對另一個對象的引用,通過這個引用往上進(jìn)行屬性的查找,這就是原型鏈。

      全局的window對象

      JavaScript中的任何一個全局函數(shù)或變量都是window的屬性。

      self對象與window對象完全相同,self通常用于確認(rèn)就是在當(dāng)前的窗體內(nèi)。

      window的主對象主要有如下幾個:

      JavaScript document 對象

      JavaScript frames 對象

      JavaScript history 對象

      JavaScript location 對象

      JavaScript navigator 對象

      JavaScript screen 對象

      幾個常用方法

      valueof()方法:返回指定對象的原始值

      split() 方法將字符串分割為字符串?dāng)?shù)組,并返回此數(shù)組。

      indexOf() 方法可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置。

      substring() 方法用于提取字符串中介于兩個指定下標(biāo)之間的字符。

      substr() 方法從字符串中提取從 startPos位置開始的指定數(shù)目的字符串。

      join()方法用于把數(shù)組中的所有元素放入一個字符串。

      arrayObject.join(分隔符)

      reverse() 方法用于顛倒數(shù)組中元素的順序。

      slice() 方法可從已有的數(shù)組中返回選定的元素。

      對象字面量

      對象字面量是用于創(chuàng)建包含大量屬性的過程,

      復(fù)制代碼 代碼如下:

      

      這里需要注意的是屬性和屬性值以冒號(:)隔開;多個屬性用逗號(,)隔開。對象字面量亦可以定義方法,只需在這個對象的屬性上寫上function就行,這是一個匿名函數(shù),調(diào)用它只需要寫上他的方法名()即可。

      復(fù)制代碼 代碼如下:

      

      javascript數(shù)組部分

      1.Array 對象

      Array 對象:提供對創(chuàng)建任何數(shù)據(jù)類型的數(shù)組的支持。

      復(fù)制代碼 代碼如下:

      arrayObj = new Array()

      arrayObj = new Array([size])

      arrayObj = new Array([element0[, element1[, ...[, elementN]]]])

      定義:var arr = [2,3,45,6]; var arr = new Array(2,4,5,7)

      兩者是定義沒有任何差別,[]的性能高,因?yàn)榇a短。

      使用數(shù)組和對象字面量:var aTest = [];創(chuàng)建數(shù)組時,使用數(shù)組字面量是個好選擇;類似的,對象字面量也可用于節(jié)省空間。以下兩行是相等的,但是使用對象字面量的更加簡短:

      var oTest = new Object; //盡量不用

      var oTest = { }; //最好的選擇,或者var 0Test = [ ];

      遍歷為了達(dá)到遍歷數(shù)組的最佳性能,推薦使用經(jīng)典的 for 循環(huán)。

      復(fù)制代碼 代碼如下:

      var list = [1, 2, 3, 4, 5, ...... 100000000];

      for(var i = 0, l = list.length; i < l; i++) {

      console.log(list[i]);

      }

      上面代碼有一個處理,就是通過 l = list.length 來緩存數(shù)組的長度。

      Array 構(gòu)造函數(shù)

      由于 Array 的構(gòu)造函數(shù)在如何處理參數(shù)時有點(diǎn)模棱兩可,因此總是推薦使用數(shù)組的字面語法 - [] - 來創(chuàng)建數(shù)組。

      因此下面的代碼將會使人很迷惑:

      new Array(3, 4, 5); // 結(jié)果: [3, 4, 5]

      new Array(3) // 結(jié)果: [],此數(shù)組長度為 3

      應(yīng)該盡量避免使用數(shù)組構(gòu)造函數(shù)創(chuàng)建新數(shù)組。推薦使用數(shù)組的字面語法。它們更加短小和簡潔,因此增加了代碼的可讀性。

      Array數(shù)組的屬性

      Array數(shù)組的3個屬性:length屬性、prototype屬性、constructor屬性

      1.length屬性

      Length屬性表示數(shù)組的長度,即其中元素的個數(shù)。因?yàn)閿?shù)組的索引總是由0開始,所以一個數(shù)組的上下限分別是:0和length-1。和其他大多數(shù)語言不同的是,JavaScript數(shù)組的length屬性是可變的,這一點(diǎn)需要特別注意。

      2.prototype屬性

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

      對于Array數(shù)組對象,以以下例子說明prototype屬性的用途。

      給數(shù)組對象添加返回數(shù)組中最大元素值的方法。要完成這一點(diǎn),聲明一個函數(shù),將它加入Array.prototype,并使用它。

      復(fù)制代碼 代碼如下:

      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屬性

      表示創(chuàng)建對象的函數(shù)。說明:constructor屬性是所有具有prototype的對象的成員。它們包括除Global和Math對象以外的所有JScript固有對象。constructor屬性保存了對構(gòu)造特定對象實(shí)例的函數(shù)的引用。

      例如:

      復(fù)制代碼 代碼如下:

      x = new String("Hi");

      if(x.constructor==String) //進(jìn)行處理(條件為真)。

      //或

      function MyFunc{

      //函數(shù)體。

      }

      y=new MyFunc;

      if(y.constructor==MyFunc)//進(jìn)行處理(條件為真)。

      對于數(shù)組來說:

      y = new Array();

      數(shù)組方法:

      附上一張數(shù)組的思維導(dǎo)圖:

      

    【javascript學(xué)習(xí)筆記--數(shù)組和對象】相關(guān)文章:

    JavaScript學(xué)習(xí)筆記08-24

    JavaScript數(shù)組常用方法介紹09-04

    關(guān)于javascript對象之內(nèi)置和對象Math的使用方法10-08

    Javascript中arguments對象的詳解和使用方法08-20

    javascript克隆對象深度介紹07-25

    關(guān)于數(shù)據(jù)類型的Javascript學(xué)習(xí)筆記08-05

    JavaScript中的三種對象10-24

    使用ajax操作JavaScript對象的方法09-28

    JavaScript學(xué)習(xí)歷程和心得范文(精選10篇)02-13

    主站蜘蛛池模板: 亚洲午夜精品一级在线播放放| 亚洲欧美国产精品专区久久| 久久精品国产亚洲5555| 精品午夜福利在线观看 | 久久国产精品免费一区| 97精品一区二区视频在线观看| 久久久亚洲精品蜜桃臀| 桃花岛精品亚洲国产成人| 国产精品亲子乱子伦xxxx裸| 在线观看亚洲精品国产| 久久er国产精品免费观看8| 2024国产精品极品色在线| 99久久精品国产麻豆| 久久久久久夜精品精品免费啦| 亚洲国产成人精品女人久久久| 国产日韩高清三级精品人成| 久久精品一区二区国产| CAOPORM国产精品视频免费| 日韩精品视频一区二区三区| 青春草无码精品视频在线观 | 人妻少妇精品中文字幕av蜜桃| 美女岳肉太深了使劲国产精品亚洲专一区二区三区 | 四虎国产精品永久在线观看| 免费精品国产自产拍在线观看| 国产精品福利区一区二区三区四区| 国内精品久久久久久野外| 国产精品99久久99久久久| 精品国产一区二区三区色欲| 亚洲AV永久无码精品一百度影院| 欧美激情精品久久久久久久九九九| 国产香蕉国产精品偷在线| 国产精品热久久毛片| 国产成人AV无码精品| 99re66在线观看精品免费 | 国产乱人伦偷精品视频AAA| 亚洲AV永久无码精品成人| 亚洲?V乱码久久精品蜜桃 | 国产99久久九九精品无码| 欧美精品天天操| 91精品欧美综合在线观看| 国产福利视精品永久免费|