天天看點

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

文章目錄

  • BOM
    • wdinow對象
      • window對象常見事件
      • 定時器
  • JS執行機制
    • 線程
    • 同步和異步
  • 其他對象
    • location對象
    • navigator對象
    • history對象

BOM

BOM(Browser Object Model) 浏覽器對象模型,它提供了獨立于内容而與浏覽器視窗進行互動的對象,其核心對象是 window

BOM 由一系列相關的對象構成,并且每個對象都提供了很多方法與屬性

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

wdinow對象

  • 是 JS 通路浏覽器視窗的一個接口
  • 是一個全局對象。定義在全局作用域中的變量、函數都會變成 window 對象的屬性和方法

window對象常見事件

視窗加載事件:

① window.onload:是視窗(頁面)加載事件,當文檔内容(包括圖像、腳本檔案、css檔案等)完全加載完成會觸發該事件

  • window.οnlοad=function( ){ }
  • window.addEventListener(‘load’,function( ){ })

注意:

  1. 有了 window.onload 就可以把 JS 代碼寫到頁面元素的上方,因為 onload 是等頁面内容全部加載完畢,再去執行處理函數
  2. window.onload 傳統注冊事件方式 隻能寫一次,如果有多個,會以最後一個 window.onload 為準
  3. 如果使用 addEventListener 則沒有限制

② document.DOMContentLoaded: 在DOM加載完成時觸發,不包括CSS樣式表、圖檔和flash動畫等額外内容加載

注意:

  1. Ie9以上才支援
  2. 如果頁面的圖檔很多的話,從使用者通路到onload觸發可能需要較長的時間,互動效果就不能實作,必然影響使用者的體驗,此時用 DOMContentLoaded事件比較合适

調整視窗大小事件:

window.onresize: 當浏覽器視窗大小發生改變時會觸發該事件

  • widow.οnresize=function( ){ }
  • window.addEventListener(‘resize’,function( ){ })

定時器

window 對象提供了兩個定時器:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象
  • 回調函數可以直接寫函數,或者寫函數名或者采取字元串 ‘函數名()’ 三種形式
  • 定時器可能有很多,經常給定時器指派一個辨別符ID

定時器中this指向window

案例:60s内隻能發送一次短信

<body>
    手機号碼:<input type="number"> <button>發送</button>
    <script>
        var btn = document.querySelector('button')
        var time = 60
        btn.addEventListener('click', function () {
            //設定狀态不可用
            btn.disabled = true
            //建立定時器
            var timer = setInterval(function () {
                if (time == 0) {
                    clearInterval(timer)
                    btn.disabled = false
                    btn.innerHTML = '發送'
                } else {
                    btn.innerHTML = '還剩下' + time + '秒'
                    time--
                }
            }, 1000)
        })
    </script>
</body>
           
JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

JS執行機制

線程

  • 程序:應用程式的一次動态運作 ,有獨立的記憶體空間
  • 線程:程序的執行機關,一個程序可以分為若幹個線程

JavaScript 語言的一大特點就是單線程,也就是說,同一個時間隻能做一件事

單線程就意味着,所有任務需要排隊,前一個任務結束,才會執行後一個任務。這導緻的問題是: 如果 JS 執行的時間過長,這樣就會造成頁面的渲染不連貫,導緻頁面渲染加載阻塞的感覺

同步和異步

為了解決上述問題,利用多核 CPU 的計算能力,HTML5 提出 Web Worker 标準,允許 JavaScript 腳本建立多個線程。于是,JS 中出現了同步和異步

  • 同步:前一個任務結束後再執行後一個任務,程式的執行順序與任務的排列順序一緻、同步
  • 異步:做一件事的同時,可處理其它事情
JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象
  • 同步任務: 同步任務都在主線程上執行,形成一個執行棧
  • 異步任務: JS 的異步是通過回調函數實作的,異步任務相關回調函數添加到任務隊列中(任務隊列也稱為消息隊列)

一般而言,異步任務有以下三種類型:

  • ①普通事件,如 click、resize 等
  • ②資源加載,如 load、error 等
  • ③定時器,包括setInterval、setTimeout 等

JS執行機制:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象
<body>
    <script>
        console.log(1)
        setTimeout(function(){
            console.log(3)
        },1000)
        for(var i=0,str='';i<900000;i++){
            str+=i;
        }//利用字元串拼接拖慢執行時間
        console.log(2)
    </script>
</body>
           
JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

其他對象

location對象

window 對象給我們提供了一個 location 屬性用于擷取或設定窗體的 URL,并且可以用于解析 URL 。 因為這個屬性傳回的是一個對象,是以将這個屬性也稱為 location 對象

URL (Uniform Resource Locator, URL) :統一資源定位符

  • 格式: protocol : // host [:port] / path / [?query] # fragment
  • 例如: http: // www.sinna.cn/index.html ?name=sam&age=20 # link

URL組成:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

常用屬性:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

常用方法:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

navigator對象

navigator 對象包含有關浏覽器的資訊 導航對象

常用屬性:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

常用方法:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象
<body>
    <script>
        //navigator對象
        console.log("核心:"+navigator.appCodeName)
        console.log("名稱:"+navigator.appName)
        console.log("版本:"+navigator.appVersion)
        console.log("cookie:"+navigator.cookieEnabled)
        console.log("平台:"+navigator.platform)
    </script>
</body>
           
JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

history對象

window 對象提供了一個 history 對象,與浏覽器曆史記錄進行互動。該對象包含使用者(在浏覽器視窗中)通路過的 URL

常用屬性:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

常用方法:

JavaScript BOM及相關對象、JS執行機制BOMJS執行機制其他對象

繼續閱讀