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

第一章

  • JavaScript起源于Netscape于微軟的瀏覽器大戰時期,由Netscape與Sun公司合作開發
  • DOM是一套對文檔內容進行抽象和概念化的方法。
  • 一開始,各家瀏覽器廠商都有各自的一套DOM標準,后來由W3C結合各家優點推出一套新的DOM標準,目前基本所有瀏覽器都對這套DOM標準有這很好的支持。

第二章

數據類型

  • Js是一種弱類型語言,弱類型語言是指聲明變量的時候不需要指定變量的類型,強類型語言需要指定,比如C/C++就是強類型的。

  • 聲明變量使用var關鍵字。

  • JS不用提前聲明變量,賦值語句會自動聲明變量,但是不推薦這么做,最好提前聲明。

  • 在字符串中用反斜線\來轉義。

  • 主要有五種簡單數據類型StringNumberBooleanUndefinedNull和一種復雜數據類型Object

  • 各個數據類型的存儲形式。

    各個數據類型的存儲形式
  • 原始類型(primitive type):存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。如數字(Number)、字符串(String)、布爾(Boolen)、Null、Undefined。

  • 引用類型(reference type):存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存處。引用類型就是對象,比如 Object,Number、String,Boolen,Date、Array 等等。

數組

  • 數組是一個變量表示一個值的集合,其中每個值都是這個數組的一個元素。

  • 聲明數組的方法:

      var arr = Array(3);
      var arr = Array();//不指明數組大小
      var arr = Array("one", "two", "three");//聲明的同時賦值
    
  • 關聯數組:

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

對象

  • 對象也是用一個值表示一組值,對象的每個值都是它的一個屬性。

  • JavaScript中的變量都是某種類型的對象。

  • 對象使用點號獲取屬性和函數:

      Object.propertyName;
      Object.functionName();
    
  • 實例是對象的具體個體。

  • 使用new關鍵字為對象創建新實例:

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

  • 宿主對象:由運行環境事先定義好的對象,在web應用里,運行環境就是指瀏覽器。包括Form,Image,Element,document等。

操作

  • 使用加號拼接字符串或變量:

      var message = "hello " + "world" //hello world;
      
      var who = "world";
      var message = "hello " + who;
    
  • 數值和字符串拼接,結果會是一個更長的字符串:

      var value = "10" + 20; //結果為"1020"
    

比較操作符號

  • 執行相等操作的時候,建議使用"==="代替"==",會執行嚴格比較,會同時比較值和類型。
  • 不等操作符"!="用"!=="代替,原因同上。

函數

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

第三章 DOM

DOM

  • DOM 中的 D: document,具體到前端就是我們編寫的網頁文檔

  • DOM 中的 O: object,就是第二章中提到的對象,有用戶定義對象內建對象宿主對象

  • window 對象: 對應著瀏覽器窗口本身,這個對象的屬性和方法統稱 BOM (瀏覽器對象模型)

  • DOM中的M: Model-模型,代表某種事物的表現形式,DOM 把文檔表示為一顆樹的形式(數學意義上的樹,類似家譜樹),這里稱為“節點樹”:

    文檔樹

節點

  • 節點:網絡術語,表示網絡中的一個連接點,在 DOM 中表示文檔樹上的樹枝和樹葉。

  • 元素節點:指文檔中的各種元素,如<body>,<p>等,<html>為根元素。

  • 文本節點:各種元素包圍著的文本內容,比如<p>Hello world</p>中的這個“Hello world”。

  • 屬性節點:對元素進行描述的屬性,比如大部分元素都有的title屬性。

    三種節點
  • 獲取元素,有三種方法

    1. getElementById ,根據給定的 ID 返回特定的元素節對象點,是 document 對象特有的函數

       document.getElementById("id");
      
    2. getElementByTagName,根據給定的標簽名返回對象數組,每個對象對應文檔里面有此標簽的一個元素,可以使用通配符“*”來返回文檔里的所有元素。

       document.getElementByTagName("h1")
      
    3. getElementByClassName,HTML5 加入,跟 getElementByTagName 類似,返回一個對象數組,可以一次給定多個class name,以空格分隔,順序無關。

       document.getElementByClassName("class1 class2");
      
  • 對于不支持getElementByClassName的較老的瀏覽器,可以自己實現一個:

      function getElementByClassName(node, classname) {
          if (node.getElementsByClassName) {
              //使用現有方法
              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;
          }
      }
    

獲取和設置屬性

  • getAttribute函數用于獲取屬性

    1. 只有一個參數--打算查詢的屬性名字;
    2. 只能通過元素節點對象調用;
    3. 如果沒查詢到對應屬性,返回null
  •     object.getAttribute(attribute);
    
  • setAttribute函數用于設置屬性,也只能通過元素節點對象調用:

      object.setAttribute(attribute, value);
    

事件處理函數

  • 在特定事件發生時調用特定的 JavaScript 代碼。

  • 有很多種事件處理函數,比如onmouseover,onmouseout,onclick等。

      event = "JavaScript statement(s)";
    
  • JavaScript代碼包含在一對引號直接,這對引號之間可以放置多個 JavaScript 語句,用“;”隔開就行:

      onclick = "showPic(this)";//this表示當前對象
    
  • 在事件處理函數被觸發之后,引號之間的 JavaScript 語句被執行,被調用的語句可以給這個事件處理函數返回一個值。返回true代表這個事件被觸發了,false代表沒有觸發,利用這點,可以攔截一些默認事件,比如下面這個鏈接,點擊之后由于返回的是false,瀏覽器認為這個事件沒有被觸發,所以不會發生跳轉。

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

一些常用屬性

  • childNodes屬性:用于獲取任何一個元素的所有子元素,是一個包含這個元素所有子元素的數組(子元素除了元素節點還包括很多其他節點)。
  • nodeType屬性:獲取一個節點的節點類型,節點類型是通過數字表示:
    • 1代表元素節點;
    • 2代表屬性節點;
    • 3代表文本節點。
  • nodeValue屬性:用于獲得一個節點的值,一般元素節點的值是null,文本節點的值是它里面的文本內容。
  • firstChild屬性:獲得一個節點的第一個子節點,等同于childNodes[0]
  • lastChild屬性:獲得一個節點的最后一個子節點,等同于node.childNodes[node.childNodes.length-1]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 前言 歸根結底,代碼都是思想和概念的體現。沒人能把一種程序設計語言的所有語法和關鍵字都記住,可以查閱參考書來解決。...
    朱細細閱讀 2,950評論 4 14
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,388評論 2 36
  • 一、JS前言 (1)認識JS 也許你已經了解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,784評論 0 8
  • 遇見夏小姐之前,我從未想過結婚這件事情。 我對夏小姐說:“和你在一起,就是我人生中最后一段愛情了。” 她不置可否,...
    江凌閱讀 2,653評論 24 89
  • 文|峰語 我本來就是孩子 所以我要用孩子的單純去愛 不是說說而已
    代峰語閱讀 216評論 0 1