JavaScript DOM 編程藝術(shù)筆記(1章-3章)

第一章

  • JavaScript起源于Netscape于微軟的瀏覽器大戰(zhàn)時(shí)期,由Netscape與Sun公司合作開(kāi)發(fā)
  • DOM是一套對(duì)文檔內(nèi)容進(jìn)行抽象和概念化的方法。
  • 一開(kāi)始键菱,各家瀏覽器廠商都有各自的一套DOM標(biāo)準(zhǔn)顺饮,后來(lái)由W3C結(jié)合各家優(yōu)點(diǎn)推出一套新的DOM標(biāo)準(zhǔn),目前基本所有瀏覽器都對(duì)這套DOM標(biāo)準(zhǔn)有這很好的支持劲装。

第二章

數(shù)據(jù)類型

  • Js是一種弱類型語(yǔ)言胧沫,弱類型語(yǔ)言是指聲明變量的時(shí)候不需要指定變量的類型,強(qiáng)類型語(yǔ)言需要指定占业,比如C/C++就是強(qiáng)類型的绒怨。

  • 聲明變量使用var關(guān)鍵字。

  • JS不用提前聲明變量谦疾,賦值語(yǔ)句會(huì)自動(dòng)聲明變量南蹂,但是不推薦這么做,最好提前聲明念恍。

  • 在字符串中用反斜線\來(lái)轉(zhuǎn)義六剥。

  • 主要有五種簡(jiǎn)單數(shù)據(jù)類型String晚顷,NumberBoolean仗考,Undefined音同,Null和一種復(fù)雜數(shù)據(jù)類型Object

  • 各個(gè)數(shù)據(jù)類型的存儲(chǔ)形式秃嗜。

    各個(gè)數(shù)據(jù)類型的存儲(chǔ)形式
  • 原始類型(primitive type):存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段权均,也就是說(shuō),它們的值直接存儲(chǔ)在變量訪問(wèn)的位置锅锨。如數(shù)字(Number)叽赊、字符串(String)、布爾(Boolen)必搞、Null必指、Undefined。

  • 引用類型(reference type):存儲(chǔ)在堆(heap)中的對(duì)象恕洲,也就是說(shuō)塔橡,存儲(chǔ)在變量處的值是一個(gè)指針(point),指向存儲(chǔ)對(duì)象的內(nèi)存處霜第。引用類型就是對(duì)象葛家,比如 Object,Number泌类、String癞谒,Boolen,Date刃榨、Array 等等弹砚。

數(shù)組

  • 數(shù)組是一個(gè)變量表示一個(gè)值的集合,其中每個(gè)值都是這個(gè)數(shù)組的一個(gè)元素枢希。

  • 聲明數(shù)組的方法:

      var arr = Array(3);
      var arr = Array();//不指明數(shù)組大小
      var arr = Array("one", "two", "three");//聲明的同時(shí)賦值
    
  • 關(guān)聯(lián)數(shù)組:

      var lennon = Array();
      lennon["name"] = "John";
      lennon["year"] = 1940;
    

對(duì)象

  • 對(duì)象也是用一個(gè)值表示一組值桌吃,對(duì)象的每個(gè)值都是它的一個(gè)屬性。

  • JavaScript中的變量都是某種類型的對(duì)象晴玖。

  • 對(duì)象使用點(diǎn)號(hào)獲取屬性和函數(shù):

      Object.propertyName;
      Object.functionName();
    
  • 實(shí)例是對(duì)象的具體個(gè)體读存。

  • 使用new關(guān)鍵字為對(duì)象創(chuàng)建新實(shí)例:

      var jeremy = new Person();
    
  • 內(nèi)建對(duì)象: JavaScript中預(yù)先定義好的對(duì)象,比如Array,Date,Math

  • 宿主對(duì)象:由運(yùn)行環(huán)境事先定義好的對(duì)象呕屎,在web應(yīng)用里,運(yùn)行環(huán)境就是指瀏覽器敬察。包括Form,Image,Element,document等秀睛。

操作

  • 使用加號(hào)拼接字符串或變量:

      var message = "hello " + "world" //hello world;
      
      var who = "world";
      var message = "hello " + who;
    
  • 數(shù)值和字符串拼接,結(jié)果會(huì)是一個(gè)更長(zhǎng)的字符串:

      var value = "10" + 20; //結(jié)果為"1020"
    

比較操作符號(hào)

  • 執(zhí)行相等操作的時(shí)候,建議使用"==="代替"==",會(huì)執(zhí)行嚴(yán)格比較,會(huì)同時(shí)比較值和類型莲祸。
  • 不等操作符"!="用"!=="代替蹂安,原因同上椭迎。

函數(shù)

  • 變量作用域
    1. 全局變量:一旦聲明可以在腳步的任何位置訪問(wèn)。
    2. 局部變量:只能在聲明它的那個(gè)函數(shù)內(nèi)部訪問(wèn)(需要用var關(guān)鍵字在函數(shù)內(nèi)部聲明)田盈。

第三章 DOM

DOM

  • DOM 中的 D: document畜号,具體到前端就是我們編寫的網(wǎng)頁(yè)文檔

  • DOM 中的 O: object,就是第二章中提到的對(duì)象允瞧,有用戶定義對(duì)象简软,內(nèi)建對(duì)象宿主對(duì)象

  • window 對(duì)象: 對(duì)應(yīng)著瀏覽器窗口本身述暂,這個(gè)對(duì)象的屬性和方法統(tǒng)稱 BOM (瀏覽器對(duì)象模型)

  • DOM中的M: Model-模型痹升,代表某種事物的表現(xiàn)形式,DOM 把文檔表示為一顆樹(shù)的形式(數(shù)學(xué)意義上的樹(shù)畦韭,類似家譜樹(shù))疼蛾,這里稱為“節(jié)點(diǎn)樹(shù)”:

    文檔樹(shù)

節(jié)點(diǎn)

  • 節(jié)點(diǎn):網(wǎng)絡(luò)術(shù)語(yǔ),表示網(wǎng)絡(luò)中的一個(gè)連接點(diǎn)艺配,在 DOM 中表示文檔樹(shù)上的樹(shù)枝和樹(shù)葉察郁。

  • 元素節(jié)點(diǎn):指文檔中的各種元素,如<body>,<p>等转唉,<html>為根元素皮钠。

  • 文本節(jié)點(diǎn):各種元素包圍著的文本內(nèi)容,比如<p>Hello world</p>中的這個(gè)“Hello world”酝掩。

  • 屬性節(jié)點(diǎn):對(duì)元素進(jìn)行描述的屬性鳞芙,比如大部分元素都有的title屬性。

    三種節(jié)點(diǎn)
  • 獲取元素,有三種方法

    1. getElementById 期虾,根據(jù)給定的 ID 返回特定的元素節(jié)對(duì)象點(diǎn)原朝,是 document 對(duì)象特有的函數(shù)

       document.getElementById("id");
      
    2. getElementByTagName,根據(jù)給定的標(biāo)簽名返回對(duì)象數(shù)組镶苞,每個(gè)對(duì)象對(duì)應(yīng)文檔里面有此標(biāo)簽的一個(gè)元素喳坠,可以使用通配符“*”來(lái)返回文檔里的所有元素。

       document.getElementByTagName("h1")
      
    3. getElementByClassName茂蚓,HTML5 加入壕鹉,跟 getElementByTagName 類似,返回一個(gè)對(duì)象數(shù)組聋涨,可以一次給定多個(gè)class name晾浴,以空格分隔,順序無(wú)關(guān)牍白。

       document.getElementByClassName("class1 class2");
      
  • 對(duì)于不支持getElementByClassName的較老的瀏覽器脊凰,可以自己實(shí)現(xiàn)一個(gè):

      function getElementByClassName(node, classname) {
          if (node.getElementsByClassName) {
              //使用現(xiàn)有方法
              return node.getElementsByClassName(classname)
          } else {
              var results = new Array();
              var elems = node.getElementsByTagName("*");
              for (var i = 0; i < elems.lenth; i++) {
                  if (elems[i].className.indexOf(classname) != -1) {
                      results[results.length] = elems[1i];
                  }
              }
              return results;
          }
      }
    

獲取和設(shè)置屬性

  • getAttribute函數(shù)用于獲取屬性

    1. 只有一個(gè)參數(shù)--打算查詢的屬性名字;
    2. 只能通過(guò)元素節(jié)點(diǎn)對(duì)象調(diào)用茂腥;
    3. 如果沒(méi)查詢到對(duì)應(yīng)屬性狸涌,返回null切省。
  •     object.getAttribute(attribute);
    
  • setAttribute函數(shù)用于設(shè)置屬性,也只能通過(guò)元素節(jié)點(diǎn)對(duì)象調(diào)用:

      object.setAttribute(attribute, value);
    

事件處理函數(shù)

  • 在特定事件發(fā)生時(shí)調(diào)用特定的 JavaScript 代碼帕胆。

  • 有很多種事件處理函數(shù)朝捆,比如onmouseover,onmouseout,onclick等。

      event = "JavaScript statement(s)"懒豹;
    
  • JavaScript代碼包含在一對(duì)引號(hào)直接芙盘,這對(duì)引號(hào)之間可以放置多個(gè) JavaScript 語(yǔ)句,用“;”隔開(kāi)就行:

      onclick = "showPic(this)";//this表示當(dāng)前對(duì)象
    
  • 在事件處理函數(shù)被觸發(fā)之后歼捐,引號(hào)之間的 JavaScript 語(yǔ)句被執(zhí)行何陆,被調(diào)用的語(yǔ)句可以給這個(gè)事件處理函數(shù)返回一個(gè)值。返回true代表這個(gè)事件被觸發(fā)了豹储,false代表沒(méi)有觸發(fā)贷盲,利用這點(diǎn),可以攔截一些默認(rèn)事件,比如下面這個(gè)鏈接剥扣,點(diǎn)擊之后由于返回的是false,瀏覽器認(rèn)為這個(gè)事件沒(méi)有被觸發(fā)巩剖,所以不會(huì)發(fā)生跳轉(zhuǎn)。

      <a herf="http://www.example.com" onclik="return false;">Click me</a>
    

一些常用屬性

  • childNodes屬性:用于獲取任何一個(gè)元素的所有子元素钠怯,是一個(gè)包含這個(gè)元素所有子元素的數(shù)組(子元素除了元素節(jié)點(diǎn)還包括很多其他節(jié)點(diǎn))佳魔。
  • nodeType屬性:獲取一個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)類型,節(jié)點(diǎn)類型是通過(guò)數(shù)字表示:
    • 1代表元素節(jié)點(diǎn)晦炊;
    • 2代表屬性節(jié)點(diǎn)鞠鲜;
    • 3代表文本節(jié)點(diǎn)。
  • nodeValue屬性:用于獲得一個(gè)節(jié)點(diǎn)的值,一般元素節(jié)點(diǎn)的值是null断国,文本節(jié)點(diǎn)的值是它里面的文本內(nèi)容贤姆。
  • firstChild屬性:獲得一個(gè)節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn),等同于childNodes[0]稳衬。
  • lastChild屬性:獲得一個(gè)節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)霞捡,等同于node.childNodes[node.childNodes.length-1]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薄疚,一起剝皮案震驚了整個(gè)濱河市碧信,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌街夭,老刑警劉巖砰碴,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異板丽,居然都是意外死亡衣式,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門檐什,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碴卧,“玉大人,你說(shuō)我怎么就攤上這事乃正∽〔幔” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵瓮具,是天一觀的道長(zhǎng)荧飞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)名党,這世上最難降的妖魔是什么叹阔? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮传睹,結(jié)果婚禮上耳幢,老公的妹妹穿的比我還像新娘。我一直安慰自己欧啤,他們只是感情好睛藻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邢隧,像睡著了一般店印。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倒慧,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天按摘,我揣著相機(jī)與錄音,去河邊找鬼纫谅。 笑死炫贤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的系宜。 我是一名探鬼主播照激,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盹牧!你這毒婦竟也來(lái)了俩垃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汰寓,失蹤者是張志新(化名)和其女友劉穎口柳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體有滑,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跃闹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望艺。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛秕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出找默,到底是詐尸還是另有隱情艇劫,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布惩激,位于F島的核電站店煞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏风钻。R本人自食惡果不足惜顷蟀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骡技。 院中可真熱鬧鸣个,春花似錦、人聲如沸哮兰。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喝滞。三九已至阁将,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間右遭,已是汗流浹背做盅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窘哈,地道東北人吹榴。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滚婉,于是被迫代替她去往敵國(guó)和親图筹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 歸根結(jié)底让腹,代碼都是思想和概念的體現(xiàn)远剩。沒(méi)人能把一種程序設(shè)計(jì)語(yǔ)言的所有語(yǔ)法和關(guān)鍵字都記住,可以查閱參考書來(lái)解決骇窍。...
    朱細(xì)細(xì)閱讀 2,913評(píng)論 4 14
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,370評(píng)論 2 36
  • 一瓜晤、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示)腹纳,會(huì)使用HT...
    凜0_0閱讀 2,752評(píng)論 0 8
  • 遇見(jiàn)夏小姐之前痢掠,我從未想過(guò)結(jié)婚這件事情驱犹。 我對(duì)夏小姐說(shuō):“和你在一起,就是我人生中最后一段愛(ài)情了足画⌒劬裕” 她不置可否,...
    江凌閱讀 2,648評(píng)論 24 89
  • 文|峰語(yǔ) 我本來(lái)就是孩子 所以我要用孩子的單純?nèi)?ài) 不是說(shuō)說(shuō)而已
    代峰語(yǔ)閱讀 210評(píng)論 0 1