Javascript高級程序設計第八九章

1.全局變量不能通過delete操作符刪除,而直接在window對象上的定義的屬性可以。

var age = 29;
        window.color = "red";
        
        //throws an error in IE < 9, returns false in all other browsers
        delete window.age;

        //throws an error in IE < 9, returns true in all other browsers
        delete window.color;    //returns true
        
        alert(window.age);      //29
        alert(window.color);    //undefined
		alert(window.name);

嘗試訪問未聲明的變量會拋出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在

//這裏會拋出錯誤,因爲oldValue未定義
var newValue = oldValue;

//這裏不會拋出錯誤,因爲這是一次屬性查詢
//newValue的值是undefined
var newValue = window.oldValue

這個簡單的原理其實用在很多地方上,比如可以判斷是否爲初次定義,怎麼怎麼樣的


2.document.body和document.documentElement

參考鏈接:   document.compatMode

IE對盒模型的渲染在 Standards Mode和Quirks Mode是有很大差別的,在Standards Mode下對於盒模型的解釋和其他的標準瀏覽器是一樣,但在Quirks Mode模式下則有很大差別,而在不聲明Doctype的情況下,IE默認又是Quirks Mode。所以爲兼容性考慮,我們可能需要獲取當前的文檔渲染方式。

 document.compatMode正好派上用場,它有兩種可能的返回值:BackCompat和CSS1Compat,對其解釋如下:

BackCompat Standards-compliant mode is not switched on. (Quirks Mode)

CSS1Compat Standards-compliant mode is switched on. (Standards Mode)

官方解釋:

BackCompat:標準兼容模式關閉。
CSS1Compat:標準兼容模式開啓。

當document.compatMode等於BackCompat時,瀏覽器客戶區寬度是document.body.clientWidth;
當document.compatMode等於CSS1Compat時,瀏覽器客戶區寬度是document.documentElement.clientWidth。

(上面這一段我是不認同的,因爲在document.body獲取的是body標籤,而document.documentElement獲取的是html標籤,但對於滾動條的Top確實是按照上面的原理,我已經實際驗證過了)

瀏覽器客戶區高度、滾動條高度、滾動條的Left、滾動條的Top等等都是上面的情況。

3.location:①window和document下的同一個對象屬性,它提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。

②每次修改location的屬性(除hash外,頁面都會以新URL重新加載)

③如果調用reload()不傳遞任何參數,頁面都會以最有效的方式重新加載。也就是說,如果頁面自上次請求以來並沒有改變過,頁面就會以最有效的方式重新加載。如果要強制從服務器重新加載,就需要傳遞參數true

4.navigator對象:有用的屬性就是online、platform、userAgent

userAgent的用處可以識別所使用的瀏覽器,在近期做過的項目中發現,嵌入在app上的網頁可以通過userAgent來識別APP客戶端的版本信息,

詳情戳鏈接第12條  聯通項目經驗與收穫

platform的用處在於可以識別你用的是什麼系統,到現在我也只用過來識別是PC端還是MOBILE端,

可以從下面的代碼知道,我們只是識別用戶的platform到底是win、mac、liunx,除此之外就是MOBILE端了,

而X11其實就是類UNIX和UNIX系統了,詳情戳 介紹X winodw System

<script type="text/javascript"> 
        //平臺、設備和操作系統 
       
        var system = { 
            win: false, 
            mac: false, 
            xll: false, 
            ipad:false 
        }; 
        //檢測平臺 
        var p = navigator.platform; 
        system.win = p.indexOf("Win") == 0; 
        system.mac = p.indexOf("Mac") == 0; 
        system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); 
        system.ipad = (navigator.userAgent.match(/iPad/i) != null)?true:false; 
        //跳轉語句,如果是手機訪問就自動跳轉到wap.baidu.com頁面 
        if (system.win || system.mac || system.xll||system.ipad) {
        	
 
        } else { 
        	
 
            window.location.href = "mgdlt.jsp"; 
        } 
</script>

5.COM對象:①IE是以COM對象的方式實現插件的,而COM對象使用唯一標識符來標識。

②在IE8及之前版本,DOM對象是宿主對象,IE以及更早版本中的宿主對象是通過COM而非JScript實現的。所以document.createElement()函數確實是個COM對象,而非函數,IE9糾正了這個問題。

6.五大呈現引擎:IE,Gecko(火狐等)、Webkit(Safari、chrome、IOS、Android)、KHTML(Linus)、Opera,可能寫的不對,要想知道詳情,還是看JS高程的第九章,仔細地看來龍去脈,其實以前我也覺得這章很難,但看第三遍(一二遍看得很隨便)的時候發現,也還好啦。

就算呈現引擎一樣,但Javascript引擎卻不一樣,比如Safari瀏覽器和Chrome瀏覽器。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章