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瀏覽器。