JavaScript高級程序設計-讀書筆記

[TOC]

JavaScript高級程序設計

第一章 JavaScript簡介

  • 文檔對象模型DOM:針對XML但經(jīng)過擴展用于HTML的應用程序編程接口辟汰,把整個頁面映射為一個多節(jié)點結構列敲。
    DOM不只是針對JavaScript的,很多別的語言也都實現(xiàn)了DOM帖汞。但在Web瀏覽器中戴而,基于ECMAScript實現(xiàn)的DOM已經(jīng)成為JavaScript的重要組成部分。
  • 瀏覽器對象模型BOM

第二章 在HTML中使用JavaScript

2.1 script元素

1. 使用<!-- <script>元素嵌入JavaScript代碼時翩蘸,指定type屬性所意,type="text/javascript" 
2. <script></script>如果放在head中,則必須等到全部JavaScript代碼都被下載解析和執(zhí)行完成才開始呈現(xiàn)界面催首,所以現(xiàn)在很多都放在Body的最后面扶踊,從而感覺打開頁面速度加快
    3. defer屬性,表明腳本在執(zhí)行時不會影響頁面構造郎任,等整個頁面都解析完畢后再運行
    4. async 適用于外部腳本文件秧耗,告訴瀏覽器立即下載,但不保證按指定的先后順序執(zhí)行
    5. &lt 來代替小于號(<)
###2.2 嵌入代碼與外部文件
1. 引入JavaScript有兩種方式:
     - 讓腳本與標記混合在一起
     - 包含外部的JavaScript文件  將src屬性設置為指向相應文件的URL

##第三章 基本概念
###3.4 數(shù)據(jù)類型 Undefined Null Boolean Number String Object
    1. 可以用typeof操作符來檢測給定變量的數(shù)據(jù)類型
        alert(typeof(message));
    2. 非數(shù)值轉換為數(shù)值: 
    Number()    【可以用于任何數(shù)據(jù)類型】   
    parseInt() 舶治、parseFloat()  【專用于把字符串轉換成數(shù)值】    
###3.5 操作符
    1. 一元操作符(只能操作一個值的操作符)如++ -- + - 
    在對非數(shù)值應用一元加操作時绣版,該操作符會像Number()轉型函數(shù)一樣對這個值執(zhí)行轉換,即為:布爾值false 和 true 會被轉換為0和1歼疮,字符串會被解析;
    對象則是先調用valueOf()或 toString()方法
2. 位操作符 
    NOT(按位非) 
    AND(按位與) 
    XOR(按位異或) 
    左移(<<)[右填0诈唬,相當于乘2] 
    有符號右移(>>)[保持符號位韩脏,相當于除2]
    無符號右移(>>>)[正數(shù)相同,負數(shù)非常大]
3. 布爾操作符 NOT AND OR
4. 乘性操作符 * / %
5. 加性操作符 + -
6. 關系操作符 < > <= >= 
7. 相等操作符 == != ===(全等铸磅,兩操作數(shù)未經(jīng)轉換就相等的情況下返回true)
8. 條件操作符 variable = boolean_expression ? true_value : false_value
9. 賦值操作符 = *= /= %= += -= <<= >>= >>>=
10. 逗號操作符 ,
###3.7 函數(shù)
    1. 函數(shù)內可以通過arguments來訪問這個參數(shù)數(shù)組赡矢,從而獲取傳遞給函數(shù)的每一個參數(shù)
    2. Array.prototype.slice.call先將其轉為數(shù)組杭朱。
    3. 函數(shù)定義不存在重載,如果一個名字定義了兩次吹散,則是后面一個
##第四章 變量弧械、作用域和內存問題
###4.1 基本類型和引用類型的值
1. 基本類型值: 簡單的數(shù)據(jù)段 Undefined Null Boolean Number String 【固定大小,保存在棧內存中】
  引用類型值: 多個值構成的對象 【保存在堆內存中】==>實際上不是對象本身空民,而是一個指向對象的指針
2. 確定一個值是哪種引用類型刃唐,使用instanceof 
###4.2 執(zhí)行環(huán)境及作用域
1. 延長作用域鏈
    全局環(huán)境  局部環(huán)境
    1. try-catch語句
    2. with語句
        將指定的對象添加到作用域鏈中
2. 沒有塊級作用域
    聲明變量會自動添加到最接近的環(huán)境中。
    先在局部變量中找界轩,層級向外找該標識符画饥,即為若局部環(huán)境中存在同名標識符,就不會使用位于父環(huán)境中的標識符浊猾。
###4.3 垃圾收集
1. 自動垃圾收集機制抖甘,無需開發(fā)人員關心內存分配和回收機制
2. 兩種自動垃圾收集算法:標記清除、引用計數(shù)
    1. 標記清除
        
    2. 引用計數(shù)

##第五章 引用類型
###5.1 Object類型
1. 建議使用.來訪問屬性葫慎,除非屬性名中含有" "空格
###5.2 Array類型
1. 檢測數(shù)組
    1. instanceof
        arr instanceof Array
        假定單一的全局執(zhí)行環(huán)境 若網(wǎng)頁包含多個框架衔彻,世界存在兩個不同的全局執(zhí)行環(huán)境...
    2. Array.isArray(arr)
2. 轉換方法
    toLocaleString()    返回數(shù)組中每個值的字符串拼接而成由逗號隔開的字符串 
    toString()          返回數(shù)組中每個值的字符串拼接而成由逗號隔開的字符串  
                        alert(arr)默認調用toString()方法
    valueOf()           返回數(shù)組中每個值的字符串拼接而成由逗號隔開的字符串
    join("|")           可以使用不同的分隔符來構建這個字符串  
    3. 棧方法
        push()      pop()  
    4. 隊列方法 
        shift()     獲得數(shù)組中的第一項     
        unshift()   在數(shù)組前端添加任意幾項     
    5. 重排序方法    
        reverse()   對數(shù)組的順序進行反轉,也是排好序的    
    sort()      默認小值放前面
```
        function compare(value1,value2) {
            if(value1<value2) {
                return -1;
            }else {
                return 1;
            }
        }
        values.sort(compare)
```
    或者直接values.sort(value2-value1);
    6. 操作方法 
        concat()    復制原數(shù)組偷办,并添加新的參數(shù)艰额,返回新數(shù)組    
            參數(shù):一或多個數(shù)組 
            var arr = ["a","b"];
            var arr2 = arr.concat("c",["d,"e]);
            //arr2 :["a","b","c"÷,"d","e"];
    slice()     基于當前數(shù)組,返回數(shù)組     
        一個參數(shù):返回從該參數(shù)指定位置到數(shù)組末尾的所有項
        兩個參數(shù):返回起始和末尾位置之間的一項爽篷,但不包括末位位置項悴晰,若參數(shù)為負數(shù),則為數(shù)組長度加上該負數(shù)的位置
        arr.slice()             //[0,end]
        arr.slice(begin)        //[begin, end]
        arr.slice(begin,end)    //[begin,end)
    splice()
        刪除:兩個參數(shù)逐工,要刪除的第一項的位置铡溪、刪除項數(shù)
        插入:三個參數(shù),起始位置泪喊、0(刪除項數(shù))棕硫、要插入的項(可插入多個,為第四袒啼、五個參數(shù))
        替換:三個參數(shù)哈扮,起始位置、刪除項數(shù)蚓再、要插入的任意項數(shù)滑肉, 會先刪除,再插入
    7. 位置方法 
        indexOf()       兩個參數(shù):要查找的項摘仅,查找起點的索引(可選) 從數(shù)組開頭向后查
        lastIndexOf()   兩個參數(shù):要查找的項靶庙,查找起點的索引(可選) 從數(shù)組最后向前查
    8. 迭代方法 
        兩個參數(shù):每一項上運行的函數(shù)、運行該函數(shù)的作用域對象(可選娃属,默認this) 
            函數(shù)有三個參數(shù)(數(shù)組項的值六荒、該項所在數(shù)組中的位置护姆、數(shù)組對象本身)
        都不會修改原數(shù)組的值
    every()     每一項運行給定函數(shù),若該函數(shù)對每一項都返回true掏击,則返回true
    filter()    每一項都運行給定函數(shù)卵皂,返回該函數(shù)會返回true的項組成的數(shù)組
    forEach()   每一項都運行給定函數(shù),無返回數(shù)據(jù)
    map()       每一項都運行給定函數(shù)砚亭,返回每次函數(shù)調用的結果組成的數(shù)組
    some()      每一項都運行給定函數(shù)灯变,若函數(shù)對任一項返回true則返回true
    9. 縮小方法 
        兩個參數(shù):每一項上調用的函數(shù)、作為縮小基礎的初始值(可選)
            函數(shù)有四個參數(shù):前一個值钠惩、當前值柒凉、項的索引、數(shù)組對象
        reduce()        從前向后遍歷 每次遍歷完的結果返回給前一個值參數(shù)
        reduceRight()   從后向前遍歷
###5.3 Date類型
1. 1970年1月1日零時開始的毫秒數(shù)
    2. Date.parse() 接收一個表示日期的字符串參數(shù)篓跛,返回相應日期的毫秒數(shù)
        四種日期格式: 6/13/2017
                    January 11.2018
                Tue May 15 2018 00:00:23 GMT-0700
                YYYY-MM-DDTHH:mm:ss.sssZ
    若不是日期膝捞,則返回NAN
3. Date.UTC() ...
4. 日期格式化方法
    toDateString()
    toTimeString()
    toLocaleDateString()
    toLocaleTimeString()
    toUTCString()
###5.4 RegExp類型  支持正則表達式
1. var expression = / pattern / flags
    flags: g 表示全局模式; i 表示不區(qū)分大小寫模式愧沟; m 表示多行模式蔬咬;
    例: var pattern1 = /[bc]at/i;
        var pattern2 = new RegExp("[bc]/at","i"); 兩句完全等價
2. RegExp實例屬性: global ignoreCase multiline lastIndex source
3. RegExp實例方法: exec() test()
4. RegExp構造函數(shù)屬性
###5.5 Function類型
1. 沒有重載:聲明兩個同名函數(shù),后面的函數(shù)覆蓋前面的函數(shù)
2. 函數(shù)聲明:    function sum(num1,num2){return num1+num2}
  函數(shù)表達式:    var sum = function(num1,num2){return num1+num2};
3. 函數(shù)可以作為參數(shù)傳入函數(shù)中
4. 函數(shù)內部屬性   arguments   保存函數(shù)參數(shù)
                callee      指針沐寺,指向擁有這個arguments對象的函數(shù)
                this        引用函數(shù)據(jù)以執(zhí)行的環(huán)境對象林艘,全局中為window
                caller      保存調用當前函數(shù)的引用,若為全局作用域中調用當前函數(shù)混坞,值為null
5. 函數(shù)的屬性和方法 
                length      函數(shù)希望接收的命名參數(shù)的個數(shù)
                prototype   保存引用類型所有實例方法狐援,不可枚舉的
                apply()     兩個參數(shù),一個是其中運行函數(shù)的作用域究孕,一個是參數(shù)數(shù)組啥酱。
                call()      與apply()
                            功能相同,第一個參數(shù)也是this厨诸,后面的參數(shù)镶殷,直接傳給函數(shù)
                bind()      創(chuàng)建一個函數(shù)實例,其this值會被綁定給bind的參數(shù)
                toLocalString()
                toString()
                valueOf()   這幾個返回函數(shù)代碼
###5.6 基本包裝類型 (Boolean Number String)
1. Boolean
2. Number
3. String類型
    1. 字符方法     
        charAt(2)       返回給定位置字符
        charCodeAt(1)   返回給定位置字符編碼
    2. 字符串操作方法  
        concat()        將一個或多個字符串拼接
        slice()         創(chuàng)建新字符串 兩個參數(shù):字符串開始位置微酬、結束后一個位置
        substr()        創(chuàng)建新字符串 兩個參數(shù):字符串開始位置绘趋、結束后一個位置
        substring()     創(chuàng)建新字符串 兩個參數(shù):字符串開始位置、字符串長度
    3. 字符串位置方法  
        indexOf() 
        lastIndexOf()
    4. trim()方法         創(chuàng)建字符串副本颗管,從一個字符串的兩端刪除空白字符
    5. 字符串大小寫轉換方法   
        toLowerCase() toLocaleLowerCase() 
        toUpperCase() toLocaleUpperCase()
    6. 字符串的模式匹配方法   
        match()     [只接受一個參數(shù)陷遮,要么是正則表達式,要么是RegExp對象] 
                    返回數(shù)組
        search()    [返回出現(xiàn)的索引] 
        replace()   兩個參數(shù):RegExp垦江、字符串/函數(shù)
    7. localeCompare()方法    比較字符串
    8. fromCharCode()方法 
    9. HTML方法
###5.7 單體內置對象 (開發(fā)人員不必顯式地實例化內置對象拷呆,因為已經(jīng)實例化了)
1. Global對象
    1. URI編碼方法      
        encodeURI() encodeURIComponent() decodeURI() decodeURIComponent()
    2. eval()方法     完整的ECMAScript解析器,只接受一個參數(shù),為JavaScript字符串代碼
    3. Global對象的屬性  
    4. window對象     
2. Math對象
    1. Math對象的屬性
    2. min()和max()方法
    3. 舍入方法
    4. random()方法
    5. 其他方法

##第六章 面向對象的程序設計
###6.1 理解對象
1. 屬性類型(數(shù)據(jù)屬性茬斧、訪問器屬性)
    1. 數(shù)據(jù)屬性 
    包含一個數(shù)據(jù)值的位置,這個位置可以讀取和寫入
    [Configurable: true][Enumerable: true][Writable: true][Value: undefined] 默認值必須使用Object.defineProperty()方法才能修改
    2. 訪問器屬性 
    不包含數(shù)據(jù)值梗逮,包含一對getter和setter函數(shù)
    [Configurable: true][Enumerable: true][Get: undefined][Set: undefined] 默認值必須使用Object.defineProperty()方法定義
2. 定義多個屬性
    Object.defineProperties() 方法 可以一次定義多個屬性
    Object.defineProperty(obj, prop, descriptor)
        obj 需要定義屬性的對象项秉。
        prop 需被定義或修改的屬性名。
        descriptor 需被定義或修改的屬性的描述符慷彤。
    
    var o = {}; // 創(chuàng)建一個新對象

    // 在對象中添加一個屬性與數(shù)據(jù)描述符的示例
    Object.defineProperty(o, "a", {
      value : 37,
      writable : true,
      enumerable : true,
      configurable : true
    });


3. 讀取屬性的特性
    Object.getOwnPropertyDescriptor()
    兩個參數(shù):屬性所在的對象娄蔼、要讀取器描述屬性名稱
###6.2 創(chuàng)建對象
1. 工廠模式 
    function cratePerson(name,age,job) {
        var o = new Object;
        o.name = name;
        ...
        return o;
    }
    var person1 = createPerson("zhang",12,"doctor")
    var person2 = createPerson("li",14,"nurse")
    未解決怎樣知道一個對象的類型

2. 構造函數(shù)模式   
    function Person(name, age, job) {
        this.name = name;
        ...
    }
    var person1 = new Person("li",14,"doctor")

    new操作符以下4個步驟:
        1. 創(chuàng)建一個新對象
        2. 將構造函數(shù)的作用域賦給新對象(因此this指向了這個新對象)
        3. 執(zhí)行構造函數(shù)中的代碼
        4. 返回新對象
        若不使用new,則直接添加到window上
    缺點:每個方法都要在每個實例上重新創(chuàng)建一遍
    修正:將函數(shù)寫在外面:
    然后內部用:this.sayName = sayName
    function sayName() {
        alert(this.name);
    }

3. 原型模式 
    function Person(){
    }
    Person.prototype.name ="li";
    ...
    Person.prototype.sayName = function() {
        alert(this.name)
    }
    var person1 = new Person();

    1. 使用prototype屬性對其屬性進行賦值和定義底哗,構造函數(shù)變?yōu)榭?    2. 新函數(shù)都會有自身的prototype屬性岁诉,屬性指向函數(shù)的原型對象 
    3. Array.prototype 可以訪問器所有的默認方法引用(同樣適用于Object String)

4. 組合使用構造函數(shù)模式和原型模式
5. 動態(tài)原型模式   構造函數(shù)中使用if語句,判定存在與否跋选,是否定義某函數(shù)屬性
6. 寄生構造函數(shù)模式     
7. 穩(wěn)妥構造函數(shù)模式     安全環(huán)境涕癣,不使用this、new
###6.3 繼承 【只支持實現(xiàn)繼承前标,不支持接口繼承】
每一個構造函數(shù)都有一個原型對象坠韩,原型對象都包含一個指向構造函數(shù)的指針,而實例都包含一個指向原型對象的內部指針
1. 原型鏈      
    1. 所有引用類型默認都繼承了Object
    2. 繼承:SubType.prototype = new SuperType()       
        通過創(chuàng)建SupeType的實例并將實例賦值給SubType.prototype實現(xiàn)的
    new操作符以下4個步驟:
        1. 創(chuàng)建一個新對象
        2. 將構造函數(shù)的作用域賦給新對象(因此this指向了這個新對象)
        3. 執(zhí)行構造函數(shù)中的代碼
        4. 返回新對象
    3. 默認的原型
        為Object炼列,所有的Prototype都是繼承了Object
    4. 缺點:
        1. 包含引用類型值的原型
            如:superType包含的屬性只搁,subType的所有實例都包含相同的內容
        2. 在創(chuàng)建子類型的實例中,不能像構造函數(shù)中傳遞參數(shù)

2. 借用構造函數(shù)   
    子類型構造函數(shù)的內部調用超類型構造函數(shù)
    function SuperType(name) {
        this.name = name;
    }
    function SubType() {
        SuperType.call(this,"li") //繼承了SuperType俭尖,同時傳遞了參數(shù)
        this.age = 29;
    }
    缺點:
        方法都是在構造函數(shù)中調用氢惋,函數(shù)無任何復用

3. 組合繼承
    使用原型鏈實現(xiàn)對原型屬性和方法的繼承,而通過構造函數(shù)來實現(xiàn)對實例屬性的繼承
    function SuperType(name) {
        this.name = name;
        this.colors=["red"...];
    }
    SuperType.prototype.sayName = function() {
        alert(this.name)
    }
    function SubType(name,age) {
        //繼承屬性
        SuperType.call(this,name)//原型屬性
        this.age = age//自身屬性
    }
    //繼承方法
    SubType.prototype = new SuperType();
    SubType.prototype.sayAge = function() {
        alert(this.age);
    }
    原型鏈和借用構造函數(shù)組合一起
    缺點:調用兩次超類型構造函數(shù):SuperType

4. 原型式繼承
        Object.create(person)方法稽犁,有一個對象作為另一個對象的基礎
        兩個參數(shù):第一個為原對象
                第二個為:自身屬性
5. 寄生式繼承        
    創(chuàng)建一個勁用于封裝繼承過程的函數(shù)焰望,然后用某種方式來增強對象
    缺點:不能函數(shù)復用
6. 寄生組合式繼承
    將那兩個函數(shù)封裝為一個

##第七章 函數(shù)表達式
###7.1 遞歸
###7.2 閉包 【有權訪問另一個函數(shù)作用域中的變量的函數(shù)】
1. 閉包與變量        [javascript_problem_1]
2. 關于this對象 
3. 內存泄露
###7.3 模仿塊級作用域
###7.4 私有變量
1. 靜態(tài)私有變量
2. 模塊模式
3. 增強的模塊模式
    


##第八章 BOM
###8.1 window對象
全局作用域
窗口位置:
    IE Safari Opera Chrome:screenLeft screenTop
    Firefox:screenX screenY
    moveTo(x,y) 將窗口移動到一個新位置,新位置的x,y坐標   —|
    moveBy(x,y) 水平和垂直方向上移動的像素數(shù)          _| 可能被瀏覽器禁用
窗口大戌愿丁:
    innerWidth  innerHeight  頁面視圖區(qū)大惺凉馈(減去邊框寬度)
    outerWidth  outerHeight  瀏覽器窗口本身尺寸
    document.documentElement.clientWidth/clientHeight 保存頁面視口信息
    調整瀏覽器窗口大小(默認禁用):resizeTo() resizeBy()
導航和打開窗口:
    window.open()   打開一個新瀏覽器窗口  
    4個參數(shù):要加載的url陷猫、窗口目標秫舌、一個特性字符串、一個表示頁面是否取代瀏覽歷史記錄中當前加載頁面的布爾值
    1. 彈出窗口 window.open("http://www.baidu.com","baidu","height=400,width=300,top=10"); 
    2. 安全限制 
    3. 彈出窗口屏蔽程序 badu == null 或者使用try{}catch(){}
間歇調用和超時調用:
    1. setTimeout(要執(zhí)行代碼绣檬,以毫秒表示的時間) 返回一個調用ID足陨,可使用claerTimeout(id)來取消
        JavaScript為單線程語言,過了setTimeout時間后娇未,將對應要執(zhí)行代碼添加到任務隊列中墨缘。若隊列為空,則執(zhí)行該代碼。
    2. setTnterval(執(zhí)行代碼镊讼,時間) 也返回一個調用id 可使用clearInterval(id)來取消
系統(tǒng)對話框
    alert()
    confirm()
    prompt()
###8.2 location對象
既是window對象的屬性宽涌,又是document對象的屬性:window.location=document.location
hash host hostname href pathname port protocol search
查詢字符串參數(shù):location.search() 
位置操作:
    location.assign("http://www.baidu.com");
    location.;
    location.hash/search/hostname/port
    location.replace("http://www.baidu.com"); 不會再歷史記錄中生成新記錄
    reload() 重新加載當前顯示的頁面〉澹可能從緩存中加載卸亮,如果添加true參數(shù),就是從服務器重新加載
###8.3 Navigator對象
通常用于檢測瀏覽器類型
    userAgent
檢測插件:
    plugins 數(shù)組每一項都包含:name description filename length
    每個插件對象本身是一個MimeType對象數(shù)組
    IE中檢測插件:ActiveXObject(name)檢測玩裙,name為COM對象的唯一標識符
    集合有refresh()方法兼贸,若傳入tre參數(shù),則重新加載整個頁面吃溅,否則只會更新plugins集合
注冊處理程序
    MIME類型:application/rss+xml溶诞、applcation/atom+xml、application/vnd.mozilla.maybe. feed
    RSS ATOM feed
###8.4 screen對象
外部顯示器信息
###8.5 history對象
go()在用戶歷史記錄中任意跳轉
back()后退
forward()前進
length屬性 保存的歷史記錄的數(shù)量



##第九章 客戶端檢測
###9.1 能力檢測
不是識別特定的瀏覽器决侈,而是識別瀏覽器的能力
檢測是否有sort方法螺垢,要使用typeof sort == "function" 來判斷是否函數(shù)
###9.2 怪癖檢測
識別瀏覽器的特殊行為
###9.3 用戶代理檢測
通過檢測用戶代理字符串來確定實際使用的瀏覽器 Navigator.userAgent
電子欺騙:瀏覽器通過在自己的用戶代理字符串中添加一些錯誤信息,達到欺騙服務器的目的
1. 識別呈現(xiàn)引擎:IE Gecko WebKit KHTML Opera
2. 識別瀏覽器
3. 識別平臺:Windows Mac Unix
4. 識別Windows操作系統(tǒng)
5. 識別游戲設備
6. 識別游戲系統(tǒng)


##第十章 DOM
IE中所有的DOM對象都是以COM對象的形式實現(xiàn)的颜及,因此與原生JavaScript對象的行為或活動特點不一致甩苛。
###10.1 節(jié)點層次
1. Node 類型
    nodeType屬性:
            1:ELEMENT_NODE
            2: ATTRIBUTE_NODE ...
    nodeName【元素標簽名】 、nodeValue 【null】屬性
    chlidNotes屬性 和 NodeList對象
        var arrayOfNodes = Array.prototype.slice.call(someNode.childNodes,0);//將NodeList轉換為數(shù)組
    parentNode屬性
        firstChild lastChild
    appendChild()
        向childNodes列表末尾添加一個節(jié)點俏站,并返回新增節(jié)點讯蒲,若本來就有該節(jié)點,則從原來位置移動到新的位置
    insertBefore(要插入節(jié)點肄扎,作為參照節(jié)點)
        放在某個特定的位置上
    replaceChild()
        替換
    removeChild()
        移除節(jié)點
    cloneNode() 
        接收一個布爾值參數(shù)墨林,表示是否執(zhí)行深復制
2. Document 類型
    HTMLDocument實例的document對象,document.childNotes 為<!DOCTYPE html> 和<html>
    document
        document.titile     只讀
        請求相關屬性 HTTP頭部
            URL 頁面完整URL 只讀
            domain  頁面域名    可更改犯祠,為URL包含的一個子域名旭等,但不同子域頁面無法通過JavaScript通信
            referrer 鏈接到當前頁面的URL    只讀,可為空
        查找元素 
            若傳入?yún)?shù)為:"*"則為獲取所有衡载,且一般不區(qū)分大小寫
            getElementById() 
            getElementByTagName()
            namedITEM() 只返回第一個 如:
                var myImage = images.namedItem("MyImage");
            getElementsByName() 只有HTMLDocument類型才有的方法 返回為集合
        特殊集合
            document.anchors    文檔中所有帶name特性的<a>元素
            cocument.forms      文檔中所有的<form>元素 
            document.images     文檔中所有的<img>元素
            document.links      文檔中所有帶href特性的<a>元素
        document.implementation     
            檢測瀏覽器實現(xiàn)了DOM的那些部分功能
            hasFeature(要檢測DOM功能的名稱搔耕,要檢測DOM功能的版本號)
        文檔寫入功能
            write()     接收一個字符串,原樣寫入
            writeln()   接收一個字符串痰娱,末尾添加一個換行符(\n)
                "</script> -->" 不能直接寫入弃榨,要寫為"<\/script>",否則會被當做腳本塊的結束
            open()      打開網(wǎng)頁輸出流
            close()     滾逼網(wǎng)頁輸出流
3. Element 類型
    nodeType 為1 nodeName值為元素的標簽名 nodeValue值為null parentNode值可能為Document或Element
    1. HTML元素
        所有的HTML元素都由HTMLElemnt類型表示
        id  唯一標識符梨睁,對用戶透明
        title   元素附加說明信息
        lang    語言代碼鲸睛,很少使用,用戶透明
        dir     語言方向坡贺,很少使用
        className   class特性對應
    2. 取得特性
        getAttribute("class") 
            "id"/"title"/"lang"/"dir"/自定義特性(最好加上data-前綴)    
            兩類不能取得特性:style[CSS文本]官辈、onclick[因為內容為JavaScript代碼]
    3. 設置特性
        setAttribute("id","someOtherId")
        removeAttribute()
    4. attributes屬性 【遍歷元素特征】
    atrributes屬性中包含一系列節(jié)點箱舞,每個節(jié)點的nodeName是特性的名稱,nodeValue是特性的值
         getNamedItem(name)     返回nodeName屬性等于name的節(jié)點
         removeNamedItem(name)  從列表中移除nodeName屬性等于name的節(jié)點
         setNamedItem(node)     向列表中添加節(jié)點
         item(pos)      返回位于數(shù)字pos位置處的節(jié)點
    5. 創(chuàng)建元素
        document.createElement("div");
4. Text類型
nodeType 為3 nodeName為”#text“ nodeValue 的值為節(jié)點所包含的文本  parentNode為Element 不支持子節(jié)點 可通過nodeValue的data屬性訪問Text節(jié)點中包含的文本
    appendData(text)                將text添加到節(jié)點的末尾
    deleteData(offset,count)        從offset指定的位置刪除count個字符
    insertData(offset,text)         從offset指定位置插入text
    replaceData(offset,count,text)  text替換從offset到offset+cout為止處的文本
    splitText(offset)               從offset位置將當前文本節(jié)點分為兩個文本節(jié)點
    substringData(offset,count)     提取從offset到offset+count位置處的字符串
    length屬性:nodeValue.length拳亿、data.length
    1. 創(chuàng)建文本屬性   document.createTextNode()
    2. 規(guī)范化文本節(jié)點  normalize()將包含多個文本節(jié)點的父元素的文本整合為單個文本
    3. 分割文本節(jié)點   splitText() 將一個文本節(jié)點分為兩個晴股,分割位置為參數(shù)
5. Comment類型
nodeType 為8 nodeName為"#comment" ...
6. CDATASection類型 
只針對于XML的文檔,表示的是CDATA區(qū)域   繼承自Text類型 nodeType為4 ...
7. DocumentType類型
不常用 nodeType 為0 nodeName為doctype的名稱   HTML5 為 html
8. DocumentFragment類型
輕量級的文檔风瘦,可以包含和控制節(jié)點队魏,但在文檔中沒有對應的標記,可作為”倉庫“使用万搔,保存將來可能會添加到文檔中的節(jié)點
9. Attr類型
不是DOM文檔樹的一部分 一般不需要直接訪問特性節(jié)點

10.2 DOM操作技術

1. 動態(tài)腳本
    動態(tài)創(chuàng)建<script>標簽引入代碼
2. 動態(tài)樣式
    加載完成后動態(tài)添加到頁面中,使用DOM創(chuàng)建<link>元素,<style>
    加載外部樣式文件的過程是異步的官帘,加載樣式和執(zhí)行JavaScript代碼的過程沒有固定的次序
3. 操作表格
    Dom為<table><tbody><tr>等元素添加了一些屬性和方法
    ...tbody.rows[0].cells[0]
4. 使用NodeList
    每當文檔結構發(fā)生變化時瞬雹,會更新
    一般盡量減少訪問NodeList的次數(shù),或者將其值緩存起來

第十一章 DOM擴展

11.1 選擇符API

11.2 元素遍歷

11.3 HTML5

11.4 轉悠擴展

第十二章 DOM2和DOM3

12.1 DOM變化

12.2 樣式

12.3 遍歷

12.4 范圍

第十三章 事件

第十四章 表單腳本

第十五章 使用Canvas繪圖

第十六章 HTML5腳本編程

第十七章 錯誤處理與調試

第十八章 JavaScript與XML

第二十章 JSON

20.1 語法

20.2 解析與序列化

第二十一章 Ajax與Comet

第二十二章 高級技巧

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末刽虹,一起剝皮案震驚了整個濱河市酗捌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌哲,老刑警劉巖胖缤,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阀圾,居然都是意外死亡哪廓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門初烘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涡真,“玉大人,你說我怎么就攤上這事肾筐《吡希” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵吗铐,是天一觀的道長东亦。 經(jīng)常有香客問我,道長唬渗,這世上最難降的妖魔是什么典阵? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮谣妻,結果婚禮上萄喳,老公的妹妹穿的比我還像新娘。我一直安慰自己蹋半,他們只是感情好他巨,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般染突。 火紅的嫁衣襯著肌膚如雪捻爷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天份企,我揣著相機與錄音也榄,去河邊找鬼。 笑死司志,一個胖子當著我的面吹牛甜紫,可吹牛的內容都是我干的。 我是一名探鬼主播骂远,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囚霸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了激才?” 一聲冷哼從身側響起拓型,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘸恼,沒想到半個月后劣挫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡东帅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年压固,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰啃。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡邓夕,死狀恐怖,靈堂內的尸體忽然破棺而出阎毅,到底是詐尸還是另有隱情焚刚,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布扇调,位于F島的核電站矿咕,受9級特大地震影響,放射性物質發(fā)生泄漏狼钮。R本人自食惡果不足惜碳柱,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熬芜。 院中可真熱鬧莲镣,春花似錦、人聲如沸涎拉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至半火,卻和暖如春越妈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钮糖。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工梅掠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人店归。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓阎抒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親消痛。 傳聞我的和親對象是個殘疾皇子挠蛉,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容