《JavaScript 高級(jí)程序設(shè)計(jì)》學(xué)習(xí)筆記

javascript 高級(jí)程序設(shè)計(jì)

在HTML中使用javascript

1劲阎、<script> 元素
    (1) async 可選  應(yīng)該立即下載腳本,但不影響頁面的其他操作(只對(duì)外部腳本有效)
    (2) charset 可選 通過src屬性指定代碼的字符集
    (3) defer 可選 腳本可以延遲到文檔完全別解析和顯示之后執(zhí)行(只對(duì)外部腳本有效)
    (4) language 廢棄
    (5) src 可選 包含執(zhí)行代碼的外部文件
    (6) type 可選 編寫代碼使用的腳本語言的內(nèi)容類型
  引入方式
    (1)直接在頁面中嵌入  只需為<script>指定type屬性
    (2)使用外部文件 src  屬性必須指出  外部文件可以是與包含頁面位于同一個(gè)服務(wù)器文件极阅,也可以是其他任何域中的文件  優(yōu)點(diǎn):可維護(hù)  可緩存  適應(yīng)未來
  執(zhí)行順序
    從上到下依次被解析
1.1敢靡、標(biāo)簽位置
    body 最下面  </body>前面
1.2颠通、延遲腳本  最佳方案:頁面底部
1.3麻削、異步腳本  不要在加載期間修改dom

基本概念

語法
數(shù)據(jù)類型
流程控制語句
函數(shù)

1、 語法
1.1 區(qū)分大小寫
1.2 標(biāo)識(shí)符 變量 函數(shù) 屬性的名字 函數(shù)的參數(shù) 不能把關(guān)鍵字岩齿、保留字、true苞俘、false纯衍、null 用作標(biāo)識(shí)符
第一個(gè)字符必須是一個(gè)字母、下劃線(_)苗胀、或美元符號(hào)($)
其他字符可是字母 下劃線 美元符號(hào) 數(shù)字
最佳 ** 駝峰大小寫 **
1.3 注釋
單行注釋
/* /
多行注釋
/

*
*
*/
1.4 嚴(yán)格模式
use strict
1.5 語句
以分號(hào)結(jié)尾
2、關(guān)鍵字和保留字
關(guān)鍵字 表示控制語句的開始和結(jié)束或用于執(zhí)行特定的操作
保留字 導(dǎo)致“Identifier Expected” 錯(cuò)誤
3瓦堵、變量
松散類型
定義變量 var a (變量名) 未初始化 undefined ==>var 定義一個(gè)變量在函數(shù)退出后就會(huì)被銷毀
var a = 1 ,b = true , c = "hello world";
4基协、數(shù)據(jù)類型
5種基本數(shù)據(jù)類型 undefined null boolean number string
1復(fù)雜數(shù)據(jù)類型 object
typeof 操作符來檢測(cè)
object 這個(gè)值可能是對(duì)象或者null
1.undefined 只有一個(gè)值 未初始化
2.null 第二個(gè)只有一個(gè)值的數(shù)據(jù)類型 表示一個(gè)空對(duì)象指針
3.Boolean === true false 區(qū)分大小寫
4.number 整數(shù)和浮點(diǎn)數(shù)
NaN 任何涉及到NaN的操作都會(huì)返回NaN NaN與任何值都不相等

  數(shù)值轉(zhuǎn)換
    Number()  用于任何數(shù)據(jù)類型
        true false  ==》 1  0 
        數(shù)字值
        null  ==》 0 
        undefined  ==> NaN
        string   只包含數(shù)字   ==》 十進(jìn)制
                 包含浮點(diǎn)  ==》 浮點(diǎn)數(shù)值
                 十六進(jìn)制 ==》 十進(jìn)制
                 空 ==》  0 
                 以外  ==>  NaN
        object  valueOf()   toString()
    parseInt()  
        如果第一個(gè)字符不是數(shù)字會(huì)符號(hào)  ==》NaN
        空字符串  ==》0 
        不具有解析八進(jìn)制的能力
    parseFloat()  解析到一個(gè)無效的浮點(diǎn)字符為止  只解析十進(jìn)制
5.string 
    ""    ''
    轉(zhuǎn)換為字符串   toString()
                String()  null ==》null  undefined ==>undefined
6.Object  一組數(shù)據(jù)和功能的集合
    constructor  保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)
    hasOwnProperty  檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中是否存在
    isPrototypeOf 檢查傳入的對(duì)象是否是當(dāng)前對(duì)象的原型
    propertyIsEnumerable  檢查給定的屬性是否能夠使用for-in 語句來枚舉
    toLocaleString  返回對(duì)象的字符串表示  該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)
    toString  返回對(duì)象的字符串表示
    valueOf 返回的字符串  數(shù)值 布爾 表示   與toString  返回值相同

5、操作符
一元操作符 操作一個(gè)值
遞增遞減
一元加減 “+“ 只是進(jìn)行轉(zhuǎn)換 ”-“ 進(jìn)行轉(zhuǎn)化的同時(shí)也進(jìn)行計(jì)算
位操作符 有符號(hào)整數(shù) 無符號(hào)整數(shù)
布爾操作符
菇用! & ||
乘性操作符
* /
加性操作符
+ -
關(guān)系操作符
< > <= >=
相等操作符
== !=
=== !==
條件操作符
條件表達(dá)式
賦值運(yùn)算符
=
逗號(hào)操作符
,
6澜驮、語句
if 語句
do-while
while
for
for-in 枚舉對(duì)象的屬性
es6 增加for of
lable 添加標(biāo)簽
break continue 控制循環(huán)中的代碼執(zhí)行
whth 將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中
switch
7、函數(shù) function
調(diào)用函數(shù)

 return 非必須  (1)  返回值  (2)結(jié)束函數(shù)

 理解參數(shù)
    ECMAScript 中的參數(shù)在內(nèi)部是用一個(gè)數(shù)組來表示  通過arguments對(duì)象來訪問這個(gè)參數(shù)數(shù)組(并沒有數(shù)組實(shí)例) length 屬性
    命名的參數(shù)只提供便利 但不是必需的
    arguments可以與命名參數(shù)一起使用    值與對(duì)應(yīng)的命名參數(shù)的值保持同步

變量 作用域 和內(nèi)存

變量  基本類型值   簡單的數(shù)據(jù)段
      引用類型值    可能由多個(gè)值構(gòu)成的對(duì)象
        引用類型的值中的屬性可以是基本類型也可以是引用類型
        引用 可以動(dòng)態(tài)的添加屬性  基本類型不可以

     特點(diǎn):
     基本類型值在內(nèi)存中占據(jù)固定大小的空間惋鸥,因此被保存在棧內(nèi)存中杂穷。
     從一個(gè)變量向另一個(gè)變量復(fù)制基本類型的值,會(huì)創(chuàng)建這個(gè)值的副本卦绣,
     引用類型的值是對(duì)象耐量,保存在堆內(nèi)存中,
     包含引用類型值的變量實(shí)際上包含的并不是對(duì)象本身滤港,而是一個(gè)指向該對(duì)象的指針廊蜒,
     從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值,復(fù)制的其實(shí)是指針溅漾,因此兩個(gè)變量最終指向同一個(gè)對(duì)象山叮。
    傳遞參數(shù)
        所有函數(shù)的參數(shù)按值傳遞,也就是說 把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù)添履,就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣屁倔。
    檢測(cè)類型
        typeof  只能檢測(cè)5種  string  number  undefined  boolean  object
        instanceof 檢測(cè)引用類型的值

        * 使用typeof時(shí),function規(guī)范要求返回‘function’,但是在firfox以及ie的某些版本中會(huì)返回‘object’.
        * ES6中新增加了一個(gè)類型‘Symbol’暮胧,使用typeof檢測(cè)這個(gè)類型時(shí)會(huì)返回'Symbol'锐借。
        * ES6中新增的Set,Map叔壤,使用typeof檢測(cè)時(shí)會(huì)返回'object'瞎饲。

    執(zhí)行環(huán)境
        每一個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象
        全局執(zhí)行環(huán)境  Window
            代碼執(zhí)行完畢  該環(huán)境也被銷毀  保存在其中的所有變量和函數(shù)定義也隨之銷毀
        函數(shù)執(zhí)行環(huán)境
            每一個(gè)函數(shù)都有自己的執(zhí)行環(huán)境。當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí)炼绘,函數(shù)的環(huán)境就會(huì)被推入到一個(gè)環(huán)境棧中嗅战。而在函數(shù)執(zhí)行之后,棧彈出。把控制權(quán)返回給之前的執(zhí)行環(huán)境驮捍。

            當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行疟呐,會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈
            用途:保證執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。

            在局部作用域中定義的變量可以在局部環(huán)境中與全局變量互換使用东且。

            內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境启具,但外部環(huán)境不能訪問內(nèi)部環(huán)境中的任何變量和函數(shù),這些環(huán)境之間的聯(lián)系是線性的珊泳、有次序的鲁冯。

引用類型

引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起  
對(duì)象是某個(gè)特定引用類型的實(shí)例色查,新對(duì)象是使用new 操作符后跟一個(gè)構(gòu)造函數(shù)來創(chuàng)建

object 
    創(chuàng)建object的兩種方式
     一薯演、new 操作符
        var person = new Object();
        person.name = "smy";
        person.age = 18;
     二、對(duì)象字面量
        var person = {
            name:"smy",
            age:18
        }

    訪問對(duì)象屬性時(shí)使用都是  .   也可以使用方括號(hào)
    alert(person["name"])   優(yōu)點(diǎn):可以通過變量來訪問屬性
    alert(person.name)
array
    創(chuàng)建數(shù)組的兩種方式
        一秧了、使用Array構(gòu)造函數(shù)
            var books = new Array();
            或者  var books = new Array("js","css","html")
            也可以省略 new 
        二跨扮、數(shù)組字面量表示法
            var books = ["html","css","js"]
            索引 只能使用數(shù)字
            alert(books[0]);
            books[1] = "jquery";
            length  不是只讀 可改變
        檢測(cè)數(shù)組
            Array.isArray()
        轉(zhuǎn)換方法
            toLocaleString()、toString()验毡、valueOf()
        棧方法
            push() 尾部增加 并返回修改后數(shù)組的長度
            pop()  尾部移除 減少數(shù)組的length  返回移除項(xiàng)
        隊(duì)列方法
            unshift() 前邊添加任意項(xiàng)衡创,并返回新數(shù)組的長度
            shift() 移除數(shù)組的第一個(gè)并返回該項(xiàng)  數(shù)組長度- 1 
        重新排序方法
            reverse()  翻轉(zhuǎn)
            sort()  升序
        操作方法
            concat()  基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新的數(shù)組
            slice()  接受一個(gè)或兩個(gè)參數(shù)  即 起始  結(jié)束位置   但不包括結(jié)束位置的項(xiàng)。
            splice()
            作用: 刪除 splice(0,2)  刪除數(shù)組中的前兩項(xiàng)
                  插入 splice(0,2,"red","blue") 從第二個(gè)插入
                  替換 splice(2,1,"red","blue") 刪除當(dāng)前數(shù)組位置2的項(xiàng)晶通,從位置2插入字符串璃氢。
                最終返回一個(gè)數(shù)組,該數(shù)組包含從原始數(shù)組中刪除的項(xiàng)(如果沒有 返回空數(shù)組)
        位置方法
            接受兩個(gè)參數(shù)  1.要查找項(xiàng)(要求嚴(yán)格相等)  2狮辽、查找起點(diǎn)位置的索引(可選)
            返回要查找的項(xiàng)在數(shù)組中的位置拔莱,沒有找到返回 -1
            indexOf() 從開頭開始查找
            lastIndexOf() 從末尾開始查找
        迭代方法
            5種  接受兩個(gè)參數(shù) 1.要在每一項(xiàng)上運(yùn)行的函數(shù) 2.運(yùn)行該函數(shù)的作用域?qū)ο?--影響this的值(可選)
            傳入這些方法中的函數(shù)都會(huì)接受三個(gè)參數(shù) 數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置隘竭、數(shù)組對(duì)象本身塘秦。
            every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true动看,則返回true
            filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)尊剔,返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
            forEach() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),沒有返回值
            map() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)菱皆,返回每次函數(shù)條用的結(jié)果組成的數(shù)組
            some() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)须误,如果該函數(shù)對(duì)任一項(xiàng)返回true 則返回true。
        歸并方法
            迭代所有項(xiàng)仇轻,然后構(gòu)建一個(gè)最終返回值
            reduce() 從第一項(xiàng)開始 逐個(gè)遍歷
            reduceRight() 最后一項(xiàng)
            接受兩個(gè)參數(shù) 1.在每一項(xiàng)上調(diào)用的函數(shù) 2.作為歸并基礎(chǔ)的初始值(可選)
            函數(shù)接受4個(gè)參數(shù)  前一個(gè)值京痢、當(dāng)前值、項(xiàng)的索引篷店、數(shù)組對(duì)象 
            返回值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)祭椰。
Date
    var now = new Date()
    Date.parse() 
    Date.UTC() 返回表示日期的毫秒數(shù)
    Date.now() 調(diào)用這個(gè)方法時(shí)的日期和時(shí)間毫秒數(shù)
        var start = Date.now(); 如果瀏覽器不支持 var  start = + new Date();
        doSomething();
        var stop = Date.now(),
        result = stop - start;
    繼承的方法
        在不同的瀏覽器中返回的日期和時(shí)間格式不同
    日期格式化方法
        toDateString() 以特定于實(shí)現(xiàn)的格式展示星期臭家、月、日方淤、年 (瀏覽器而異)
        toTimeString()                     時(shí)分秒地區(qū)
        toLocaleDateString()  特定地區(qū)的                    (瀏覽器而異)
        toLocaleTimeString()   特定地區(qū)的
        toUTCString() 特定于實(shí)現(xiàn)的格式完整的UTC日期
    時(shí)間組件的方法
        钉赁。。携茂。
RegExp
    g 全局
    i 不區(qū)分大小寫
    m 多行
      es6增加了 y u 兩個(gè)標(biāo)志符
    元字符需要轉(zhuǎn)義  ( [ { \ ^ $ } ] ) ? * + .
    創(chuàng)建方式
        一你踩、字面量
        var pattern = /[bc] at /i
        二、RexExp構(gòu)造函數(shù)  接受兩個(gè)參 數(shù)  1.匹配的字符串的模式 2.可選標(biāo)志符串讳苦。
        var pattern2 = new RexExp("[bc]at","i")
    實(shí)例方法
        exec() 專門捕獲組設(shè)計(jì) 接受一個(gè)參數(shù) 返回包含第一個(gè)匹配項(xiàng)信息的數(shù)組
        test() 接受一個(gè)字符串參數(shù)  匹配 true  否則 false
Function
    每一個(gè)函數(shù)都是function 的實(shí)例  而且都與其他引用類型一樣具有屬性和方法
    函數(shù)是對(duì)象带膜,因此函數(shù)名實(shí)際上也是一個(gè)指向函數(shù)對(duì)象的指針。
    函數(shù)通常使用函數(shù)聲明語法定義的
      function sum (num1,num2){
          return num1+ num2
      }
      函數(shù)表達(dá)式定義函數(shù)
         var sum = function(num1,num2){
             return num1+ num2
         }
      使用Function構(gòu)造函數(shù)
        var sum = new Function("num1","num2","return num1 + num2")  不推薦
    一個(gè)函數(shù)可能會(huì)有多個(gè)名字
    
    沒有重載  將函數(shù)想象指針
     第二個(gè)函數(shù)實(shí)際上覆蓋了上一個(gè)函數(shù)
    
    函數(shù)聲明與函數(shù)表達(dá)式
        先讀取函數(shù)聲明鸳谜,并使其在執(zhí)行任何代碼之前可用钱慢,表達(dá)式必須等到解析器執(zhí)行到它所在的代碼執(zhí)行,才會(huì)真正執(zhí)行卿堂。
    作為值的函數(shù)
     函數(shù)名本身就是變量,函數(shù)也可以作為值來使用懒棉。也就是說草描,不僅可以將像傳遞參數(shù)一樣吧一個(gè)函數(shù)傳遞給另一個(gè)函數(shù),也可以將函數(shù)作為另一個(gè)函數(shù)的結(jié)果返回策严。
    內(nèi)部屬性
        arguments 
            類數(shù)組對(duì)象穗慕,包含傳入函數(shù)中的所有參數(shù)
            callee屬性,是一個(gè)指針妻导,指向擁有這個(gè)arguments對(duì)象的函數(shù)
        this 引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象---或者說是this的值
        函數(shù)的名字僅僅是一個(gè)包含指針的變量而已逛绵。
        caller 保存著調(diào)用當(dāng)前函數(shù)的函數(shù)的引用,如果全局作用域中調(diào)用當(dāng)前函數(shù)倔韭,他的值為null
    屬性和方法
        length 表示函數(shù)希望接收的命名函數(shù)參數(shù)的個(gè)數(shù)  
        prototype 保存他們所有實(shí)例方法的真正所在术浪,不可枚舉,for-in無法發(fā)現(xiàn)
        在特定的作用域中調(diào)用函數(shù)寿酌,實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值
        apply() 接收兩個(gè)參數(shù) 一個(gè)是在其中運(yùn)行函數(shù)的作用域 另一個(gè)參數(shù)數(shù)組(可以是array實(shí)例胰苏,也可以說是arguments對(duì)象
        call() 作用類似apply()區(qū)別在于 ,傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來
        bind() 創(chuàng)建一個(gè)函數(shù)的實(shí)例醇疼,其this會(huì)被綁定到傳給bind()函數(shù)的值硕并。
基本包裝類型  Boolean Number String
    與引用類型的區(qū)別,對(duì)象的生存期
    Boolean 
        與引用類型的布爾區(qū)別   1.typeof 基本類型==》boolean
                                      引用類型==》object
                             2.Boolean對(duì)象是Boolean類型的實(shí)例  instanceof  ==>true
                               c測(cè)試基本類型布爾返回false
    Number
        toFixed() 按照指定的小數(shù)位返回?cái)?shù)值的字符串
        toExponential() 返回以指數(shù)表示法秧荆,表示的數(shù)值的字符串形式
    String
        字符方法
            charAt() 以單字符字符串的形式返回給定位置的那個(gè)字符
            charCodeAt()  字符編碼
        字符串的方法
            concat() 用于將一或多個(gè)字符串拼接起來倔毙,返回拼接得到的新字符串
            slice()
            substr()
            substring()
        字符串位置的方法
            indexOf()
            lastIndexOf()
        trim()方法
            創(chuàng)建一個(gè)字符串的副本,刪除前置及后綴的所有空格乙濒,然后返回結(jié)果陕赃。
        字符串大小寫轉(zhuǎn)換
            toLowerCase()
            toLocaleLowerCase() 特定地區(qū)
            toUpperCase()
            toLocaleUpperCase() 特定地區(qū)
        字符串的模式匹配方法
            match() 接受一個(gè)參數(shù) 表達(dá)式or RegExp對(duì)象  返回一個(gè)數(shù)組
            search() 返回字符串中的第一個(gè)匹配項(xiàng)的索引  沒有  返回 -1  從頭開始查
        localeCompare() 比較兩個(gè)字符串并返回 下列值中的一個(gè):
            a 在 b 之前  -1
            a = b        0
            a 在 b 之后  1
        forCharCode() 接受一個(gè)或者多個(gè)字符編碼
        HTML 方法
單體內(nèi)置對(duì)象
    Globle 對(duì)象  不屬于其他 對(duì)象的屬性和方法,最終都是它的屬性和方法
        URL 編碼
        eval() 方法
        globle對(duì)象的屬性
        Windows對(duì)象
    Math對(duì)象
        min()
        max()
        舍入方法
            Math.ceil() 向上舍入
            Math.floor() 向下舍入
            Math.round() 向標(biāo)準(zhǔn)舍入
        random() 返回大于等于0 小魚1 的一個(gè)隨機(jī)數(shù)
            公式:值 = Math.floor(Math.random() * 可能值的總數(shù) + 第一個(gè)可能的值)
        其他方法
            Math.abs(num) 絕對(duì)值 、冪次方凯正、對(duì)數(shù)毙玻、平方根......

面向?qū)ο蟮某绦蛟O(shè)計(jì)

無序?qū)傩缘募希鋵傩钥梢园局道壬ⅲ瑢?duì)象或者函數(shù)

理解對(duì)象
    屬性類型
        數(shù)據(jù)屬性
            [[Configurable]]
            [[Enumerable]]
            [[Writable]]
            [[Value]]

            Object.defineProperty() 接受三個(gè)參數(shù) 屬性所在的對(duì)象桑滩、屬性的名字、一個(gè)描述符對(duì)象
        訪問器屬性
            getter允睹、setter

            [[Configurable]]
            [[Enumerable]]
            [[Get]] 讀取
            [[Set]] 寫入
                 不能直接定義 必須使用Object.defineProperty()來定義
    定義多個(gè)屬性
        Object.defineProperties() 接受兩個(gè)對(duì)象參數(shù) 1.添加和修改其屬性的對(duì)象 2.對(duì)象的屬性與第一個(gè)對(duì)象中要添加或修改的屬性一一對(duì)應(yīng)运准。
    讀取屬性的特性
        Object.getOwnPropertyDescriptor() 去的給定屬性的描述符
            屬性所在的對(duì)象和要讀取其描述符的屬性名稱

創(chuàng)建對(duì)象
    對(duì)象可以在代碼執(zhí)行過程中創(chuàng)建和增強(qiáng),因此具有動(dòng)態(tài)性而非嚴(yán)格定義的實(shí)體缭受。

    工廠模式
        解決多個(gè)相似對(duì)象的問題胁澳,但未解決對(duì)象識(shí)別的問題。
    構(gòu)造函數(shù)模式
        構(gòu)造函數(shù)始終以一個(gè)大寫字母開頭米者,非構(gòu)造函數(shù)則應(yīng)該以一個(gè)小寫字母開頭

        使用new 操作符韭畸,步驟
        1.創(chuàng)建一個(gè)新對(duì)象
        2.將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此this指向這個(gè)新對(duì)象)
        3.執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性)
        4.返回新對(duì)象

        將構(gòu)造函數(shù)當(dāng)做函數(shù)
            區(qū)別:調(diào)用他們的方式不同,只要通過new操作符來調(diào)用的蔓搞,那么他就可以作為構(gòu)造函數(shù)胰丁。
            缺點(diǎn):每一個(gè)方法都要在每一個(gè)實(shí)例上重新創(chuàng)建一遍。
    原型模式
        每一個(gè)函數(shù)都有一個(gè)prototype(原型)屬性喂分,這個(gè)屬性是一個(gè)指針锦庸,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法蒲祈。
    構(gòu)造函數(shù)與原型的組合
        構(gòu)造函數(shù)用于定義實(shí)例屬性甘萧,原型用于定義方法和共享的屬性
    動(dòng)態(tài)原型模式
        把所有的信息封裝在構(gòu)造函數(shù),而通過在構(gòu)造函數(shù)中初始化緣溪行梆掸,又保持同時(shí)使用構(gòu)造函數(shù)和原型的優(yōu)點(diǎn)扬卷。
    寄生構(gòu)造函數(shù)
        創(chuàng)建一個(gè)函數(shù),這個(gè)函數(shù)的作用僅僅是封裝創(chuàng)建對(duì)象的代碼酸钦,然后再返回新創(chuàng)建的對(duì)象邀泉。
    穩(wěn)妥構(gòu)造函數(shù)
        新創(chuàng)建對(duì)象的實(shí)例方法不引用this,不使用new操作符調(diào)用函數(shù)。
繼承
    接口繼承  實(shí)現(xiàn)繼承
        原型鏈
        構(gòu)建:是通過將一個(gè)類型的實(shí)例賦值給另一個(gè)構(gòu)造函數(shù)的原型實(shí)現(xiàn)的钝鸽。
            這樣子類型就能夠訪問超類型的所有屬性和方法汇恤。
            
            利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。
            如果確定原型和實(shí)例的關(guān)系
                1.instanceof操作符
                2.isPrototypeOf()
            謹(jǐn)慎定義方法
                給原型添加方法的代碼一定要放在替換原型的語句之后拔恰。
                通過原型鏈繼承時(shí)因谎,不能使用對(duì)象字面量創(chuàng)建原型方法。
        借用構(gòu)造函數(shù)
            call()
            apply()
            在將來新創(chuàng)建的對(duì)象上執(zhí)行構(gòu)造函數(shù)颜懊。
        組合繼承
            使用原型鏈實(shí)現(xiàn)對(duì)原型屬性方法的繼承财岔,而通過借用構(gòu)造函數(shù)來實(shí)現(xiàn)對(duì)實(shí)例屬性的繼承风皿。
        原型式繼承
            基于已有的對(duì)象創(chuàng)建新對(duì)象,不必印尼次創(chuàng)建自定義類型匠璧。
        寄生式繼承
            創(chuàng)建一個(gè)僅用于封裝繼承過程的函數(shù)桐款,該函數(shù)內(nèi)部以某種方式來增強(qiáng)對(duì)象,最后再像真的是它做了所有的工作一樣返回對(duì)象夷恍。
        寄生組合式繼承 (最有效的方式)

函數(shù)表達(dá)式

特點(diǎn):
不同于函數(shù)聲明魔眨,函數(shù)聲明要求必須有名字,但表達(dá)式不用酿雪,沒有名字的表達(dá)式也叫匿名函數(shù)遏暴。

定義函數(shù)的兩種
    1.函數(shù)聲明
        函數(shù)聲明提升
            在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明。
            sayHi()
            function sayHi(){
                alert("hi");
            }
    2.函數(shù)表達(dá)式
        必須先賦值才能使用
        var functionName = function(arg0,arg1,arg2){
            函數(shù)體
        }
遞歸
    使用回調(diào)提升性能指黎。
    通過使用argument.callee代替函數(shù)名朋凉,確保無論怎樣調(diào)用函數(shù)都不會(huì)出問題。
閉包
    有權(quán)訪問另一個(gè)函數(shù)作用域中的變量函數(shù)醋安。

    創(chuàng)建閉包的方式:在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)
                    當(dāng)某個(gè)函數(shù)調(diào)用的杂彭,會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境,以及相應(yīng)的作用域鏈吓揪,然后亲怠,使用arguments和其他命名參數(shù)的值來初始化函數(shù)的活動(dòng)對(duì)象。但在作用域鏈中磺芭,外部函數(shù)的活動(dòng)對(duì)象始終處于第二位,外部函數(shù)的外部函數(shù)的活動(dòng)對(duì)象處于第三位醉箕,....直至為作用域鏈終點(diǎn)的全局執(zhí)行環(huán)境钾腺。

                    作用域鏈的本質(zhì)是一個(gè)指向變量對(duì)象的指針列表,它只引用但不實(shí)際包含變量對(duì)象讥裤。

                    閉包與變量
                       閉包保存所保存的是整個(gè)變量的對(duì)象放棒,而不是某個(gè)特殊的變量。
                    this
                        this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的
                        在全局中 this 等于Window己英、
                        當(dāng)作位某個(gè)對(duì)象方法調(diào)用時(shí)间螟,this等于那個(gè)對(duì)象。
                        匿名函數(shù)的執(zhí)行環(huán)境具有全局性损肛,通常執(zhí)行window

                        this與argument存在同樣的問題厢破,如果想訪問作用域中的argument 對(duì)象,必須將該對(duì)象的引用保存到另一個(gè)閉包能訪問的變量中治拿。

                        var name = "The window"
                        var object = {
                            name : "My Object",

                            getNameFunc :function(){
                                var that = this;
                                return function(){
                                    return that.name;
                                };
                            }
                        };
                        alert(object.getNameFunc()());

                      內(nèi)存泄漏

                    模仿塊級(jí)作用域
                        塊語句中定義變量摩泪,實(shí)際上是在包含函數(shù)中而非語句中創(chuàng)建的。

                        function Number(count){
                            for(var i = 0;i < count;i++){
                                alert(i)
                            }
                            alert(i)  //計(jì)數(shù)
                        }

                         function Number(count){
                            for(var i = 0;i < count;i++){
                                alert(i)
                            }
                            var i;//重新聲明變量
                            alert(i)  //計(jì)數(shù)
                        }
                        在es6 中有所改變劫谅,  let i ;  不可在同一作用域中见坑,多次聲明

                        (function(){
                            //這里是塊級(jí)作用域
                        })()
                        立即執(zhí)行函數(shù)嚷掠。

                    私有變量
                        任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量荞驴,因?yàn)椴荒茉诤瘮?shù)外部訪問這些變量

                        私有變量包括:函數(shù)的參數(shù)不皆,局部變量和在函數(shù)內(nèi)部定義的其他函數(shù)。

                        function  add(num1,num2){
                            var sum = num1 + num2;
                            return sum;
                        }
                        
                        靜態(tài)私有變量
                            初始化未經(jīng)聲明的變量熊楼,總是會(huì)創(chuàng)建一個(gè)全局變量
                            在嚴(yán)格模式下霹娄,給未經(jīng)聲明的變量賦值會(huì)導(dǎo)致錯(cuò)誤。
                        模塊模式  為單例  (只有一個(gè)實(shí)例的對(duì)象)創(chuàng)建私有變量和特權(quán)方法孙蒙。
                        增強(qiáng)的模塊模式  適合單例必須是某種類型的實(shí)例项棠,同時(shí)還必須添加某些屬性和伙房對(duì)其加以增強(qiáng)的情況。

BOM 瀏覽器對(duì)象模型

1.window 對(duì)象
    BOM 的核心對(duì)象 window挎峦,它表示一個(gè)瀏覽器的實(shí)例

    全局作用域
        1.window對(duì)象同時(shí)扮演著 ECMScript 中的Global 對(duì)象角色, 因此全局聲作用域中的聲明的變量香追、函數(shù)都會(huì)變成window對(duì)象的屬性和方法。
        2.全局變量不能通過delete刪除坦胶,而直接在window對(duì)象上定義的屬性和方法透典。
        3.嘗試訪問未聲明的變量會(huì)拋出錯(cuò)誤,但是可以通過window對(duì)象顿苇,可以知道未聲明的變量是否存在峭咒。
    var age = 20;
    function sayAge(){
        alert(this.age)
    }

    alert(window.age)  //29
    sayAge()   //29
    window.sayAge() //29

    窗口關(guān)系及框架
        保存在frames 集合中
        
        top指向最高(最外)層的框架,也就是瀏覽器窗口纪岁。
        parent始終指向當(dāng)前框架的直接上層框架凑队。  有可能與等于top
    窗口的位置
        ie  safari opear chrome 提供   screenLeft/screenTop  表示窗口相對(duì)于屏幕左方的和上方的位置。
        firefox screenX/y  

        moveTo()
        moveBy()
    窗口大小
        ie9+  safari opear chrome firefox innerWidth/innerHeight(opear幔翰,頁面視區(qū)大小漩氨,減去邊框)  outerWidth/outHeight(ie9+  safari  firefox 返回本身尺寸)

        通過doucument.documentElement.clientWidth/Height 保存頁面視口的信息
    導(dǎo)航和打開窗口
        window.open()導(dǎo)航到一個(gè)特定的url,也可以打開一個(gè)新的瀏覽器窗口,接受四個(gè)參數(shù)1.要加載的URL遗增,窗口目標(biāo)叫惊,一個(gè)特性字符串,一個(gè)新頁面是否取代瀏覽器歷史記錄中當(dāng)前加載頁面的布爾值做修。
    間歇調(diào)用和超時(shí)調(diào)用
        setTimeout() 接受兩個(gè)參數(shù)  1.要執(zhí)行的代碼  以毫秒表示的時(shí)間霍狰。  返回一個(gè)id,表示超時(shí)調(diào)用饰及。
        clearTimeout()
        setInterval() 返回一個(gè)id  用于將來某個(gè)時(shí)間取消間歇調(diào)用
    系統(tǒng)對(duì)話框
        alert()
        confim()
        prompt()

2.location 對(duì)象
    提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息蔗坯,還有一些導(dǎo)航功能。
    它既是window對(duì)象的屬性燎含,也是document的屬性步悠。
    用處:不僅只表現(xiàn)在它保存著當(dāng)前文檔的信息,還表現(xiàn)在它將URL解析為獨(dú)立的片段瘫镇,      讓開發(fā)人員可以通過不同的屬性訪問這些片段鼎兽。
    2.1 查詢字符串參數(shù)
        function getStringArgs(){
            var qs = (location.search.length > 0 ? location.search.substring(1):""),  //去掉查詢字符串開頭的問號(hào)

            args = {},

            items = qs.length ? qs.split("&") : [],//分割字符串答姥,并返回name = vaule格式的字符串?dāng)?shù)組。
            item = null,
                name = null,
                value = null,
                i = 0,
                len = items.length;
                 for( i = 0; i < len;i++){
                     item = items[i].split("="); //根據(jù)  =  分割每一項(xiàng)谚咬。
                        第一項(xiàng)為參數(shù)名鹦付,第二項(xiàng)為參數(shù)值的數(shù)組。
                     name = decodeURLComponent(item[0]);
                     value = desodeURLComponent(item[1]);
                     //分別解碼name  和 value 

                     if(name.length){
                         args[name] = value;// name作為args對(duì)象的屬性择卦,value作為相應(yīng)屬性的值
                     }
                 }
                 return args;   
        }

        2.2 位置操作
            改變?yōu)g覽器的位置:assign()方法并為其傳遞一個(gè)URL
            location.assigin("http://www.baidu.com")
            等同于:window.location = "http://baidu.com"
                    location.

            禁用“后退按鈕”  使用replace()方法  只接受一個(gè)參數(shù)敲长,url,結(jié)果雖然會(huì)導(dǎo)致瀏覽器位置的改變,但不會(huì)在歷史記錄中生成新的記錄秉继。

            reload() 重新加載當(dāng)前顯示的頁面祈噪。
    
3.navigator 對(duì)象
    3.1 檢測(cè)插件
        非ie瀏覽器  plugins數(shù)組達(dá)到這個(gè)目的
            name:插件的名稱
            description:插件的描述
            filename:插件的中文名
            length:插件所處理的MIME類型的數(shù)量
    3.2 注冊(cè)處理程序
4.screen 對(duì)象
    基本上只用來表明客戶端的能力,瀏覽器窗口外部的顯示器的信息尚辑,如像素寬度和高度
5.history 對(duì)象
    用來保存上網(wǎng)的歷史記錄辑鲤,從窗口被打開的那一刻起算。
    使用go()方法可以在用戶的歷史記錄中任意跳轉(zhuǎn)杠茬,可以向前也可以向后月褥。接受一個(gè)參數(shù),history(-1)//后退
        history(1/2) //前進(jìn)一頁/兩頁
   也可以傳一個(gè)字符串參數(shù)
    history.go("wrox.com") //跳轉(zhuǎn)到最近的wrox.com頁面
    可以用back() 和 forward() 來代替

客戶端檢測(cè)

1.能力檢測(cè)
    檢測(cè)的目標(biāo)不是識(shí)別特定的瀏覽器瓢喉,而是識(shí)別瀏覽器的能力
    if(object.propertyInQuestion) {
        //使用object.propertyInQuestion
    }
    1.1 更可靠的能力檢測(cè)
        想知道某個(gè)特性是否會(huì)按照適當(dāng)?shù)姆绞叫惺隆?    1.2 能力檢測(cè)宁赤,不是瀏覽器檢測(cè)

2.怪癖檢測(cè)
    識(shí)別瀏覽器的特殊行為  想知道瀏覽器存在什么缺陷(bug)
        var hasDontEnumQuirk = function (){
            var o = { toString :function()*{} };
            for( var prop in o){
                if(prop == "toString"){
                    return false;
                }
            }
            return true;
        } ();
3.用戶代理檢測(cè)
    通過檢測(cè)用戶代理字符串來確定實(shí)際使用的瀏覽器。
    在每一次http請(qǐng)求過程中栓票,用戶代理字符串是作為響應(yīng)首部發(fā)送的,而且該字符串可以通過js的navigator.userAgent屬性訪問走贪。

DOM 文檔對(duì)象模型

DOM 描繪了一個(gè)層次化的節(jié)點(diǎn)樹佛猛,允許開發(fā)人員添加、移除厉斟、和修改頁面的某一部分挚躯。
1.節(jié)點(diǎn)層次
    對(duì)層次强衡、多類型
    節(jié)點(diǎn)分為幾種不同的類型擦秽,每種類型分別表示文檔中不同的信息及標(biāo)記。每個(gè)節(jié)點(diǎn)都擁有各自的特點(diǎn)漩勤、數(shù)據(jù)感挥、方法。

    文檔節(jié)點(diǎn)是每一個(gè)文檔的跟節(jié)點(diǎn)越败。
    
    節(jié)點(diǎn)關(guān)系
        childNodes 其中保存著一個(gè)NodeList對(duì)象 類數(shù)組對(duì)象触幼。用于保存一組有序的節(jié)點(diǎn),可以通過位置來訪問這些節(jié)點(diǎn)究飞。也有l(wèi)ength 屬性置谦,但不是Array實(shí)例堂鲤。
        它基于DOM結(jié)構(gòu)動(dòng)態(tài)執(zhí)行查詢結(jié)果。
        parentNode屬性 指向文檔樹的父節(jié)點(diǎn)媒峡。
            hasChildNodes()
            ownDocument() 指向整個(gè)文檔的文檔節(jié)點(diǎn)瘟栖。
        操作節(jié)點(diǎn)
            appendChild() 末尾添加節(jié)點(diǎn)。
            insertBefore() 接受兩個(gè)參數(shù)谅阿,要插入的節(jié)點(diǎn)半哟,作為參照的節(jié)點(diǎn)。
            replaceChild() 接受兩個(gè)參數(shù)签餐,要插入的節(jié)點(diǎn)寓涨,要替換的節(jié)點(diǎn)。
            cloneNode() 接受一個(gè)布爾值  是否深復(fù)制
     Documnet 類型
        文檔子節(jié)點(diǎn)
        文檔信息
        查找元素
            getElementById() getElementByTagName()
        特殊集合
        DOM 一致性檢測(cè)
        文檔寫入
     Element 類型
        html 元素
        取得特性
            getAttribute() 與實(shí)際特性名相同
             h5 支持自定義特性應(yīng)該加上data-前綴以便驗(yàn)證氯檐。
        設(shè)置特性  接受兩個(gè)參數(shù)戒良,要設(shè)置的特性名,值
            setAttribute() 

            removeAttribute() //徹底刪除元素的特性
        attributes 屬性 可獲取男摧、可設(shè)置
        創(chuàng)建元素
            document.creatElement() 創(chuàng)建新元素  接受一個(gè)參數(shù)蔬墩,元素的標(biāo)簽名。
        子節(jié)點(diǎn)
            childNodes 包含了它所有的子節(jié)點(diǎn)
     Text 類型
        創(chuàng)建文本節(jié)點(diǎn)
            document.creatTextNode() 創(chuàng)建新文本節(jié)點(diǎn)耗拓,接受一個(gè)參數(shù)拇颅,要插入節(jié)點(diǎn)中的文本。
        規(guī)范化文本節(jié)點(diǎn)
            normalize()
        分割文本節(jié)點(diǎn)
            splitText()
     comment 類型
     
DOM 操作技術(shù)
    1.動(dòng)態(tài)腳本
        插入外部文件
        直接插入js代碼
    2.動(dòng)態(tài)css

    3.操作表格
    4.使用NodeList

DOM擴(kuò)展

1.querySelector() 接受一個(gè)css接受符乔询,返回與該模式匹配的第一個(gè)元素樟插,如果沒有,返回null竿刁。
2.querySelectorAll() 同上黄锤。
3.matchesSeletor() 接受一個(gè)css接受符 返回true   false

元素遍歷
HTML5
    類相關(guān)擴(kuò)充
        getElementByClassName() 接受一個(gè)參數(shù),一個(gè)包含一或多個(gè)類名的字符串食拜,返回指定類的所有元素的NodeList
        classList屬性
        document.activeElement焦點(diǎn)屬性
        HTMLDocument 的變化

最近感覺自己的思維枯竭鸵熟,又重新看了一遍,每一次看完都受益匪淺负甸!寫的很棒流强!多讀書!
psb.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呻待,一起剝皮案震驚了整個(gè)濱河市打月,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚕捉,老刑警劉巖奏篙,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迫淹,居然都是意外死亡秘通,警方通過查閱死者的電腦和手機(jī)为严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肺稀,“玉大人梗脾,你說我怎么就攤上這事№镅ィ” “怎么了炸茧?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稿静。 經(jīng)常有香客問我梭冠,道長,這世上最難降的妖魔是什么改备? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任控漠,我火速辦了婚禮,結(jié)果婚禮上悬钳,老公的妹妹穿的比我還像新娘盐捷。我一直安慰自己,他們只是感情好默勾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布碉渡。 她就那樣靜靜地躺著,像睡著了一般母剥。 火紅的嫁衣襯著肌膚如雪滞诺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天环疼,我揣著相機(jī)與錄音习霹,去河邊找鬼。 笑死炫隶,一個(gè)胖子當(dāng)著我的面吹牛淋叶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伪阶,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼煞檩,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了望门?” 一聲冷哼從身側(cè)響起形娇,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤锰霜,失蹤者是張志新(化名)和其女友劉穎筹误,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體癣缅,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厨剪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年哄酝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祷膳。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陶衅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出直晨,到底是詐尸還是另有隱情搀军,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布勇皇,位于F島的核電站罩句,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敛摘。R本人自食惡果不足惜门烂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兄淫。 院中可真熱鬧屯远,春花似錦、人聲如沸捕虽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泄私。三九已至咖气,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挖滤,已是汗流浹背崩溪。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斩松,地道東北人伶唯。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像惧盹,于是被迫代替她去往敵國和親乳幸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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