window作為BOM的核心(頂層對(duì)象)马胧,表示瀏覽器窗口以及頁(yè)面的可視區(qū)域僵朗。同時(shí)席纽,window對(duì)象也是ECMAScript中的Global對(duì)象。因此撞蚕,所有的全局變量润梯,函數(shù)都是window的屬性和方法。而且原生的構(gòu)造函數(shù)比如Math甥厦、Date纺铭、Function等都存在于它的命名空間下。
只介紹實(shí)際開(kāi)發(fā)中常用的以及需要注意的點(diǎn):
一刀疙、window對(duì)象
1舶赔、全局作用域中的變量、函數(shù)都會(huì)成為window的屬性和方法谦秧。
var num = 12;
alert(window.num); // 12
2竟纳、全局變量不能通過(guò)delete操作符刪除,直接在window對(duì)象上定義的屬性則可以刪除疚鲤。
var num = 12;
window.color = 'red';
// 在IE<9中會(huì)拋出錯(cuò)誤
delete window.num;
console.log(window.num); // 12
delete window.color;
console.log(window.color); // undefined
3锥累、導(dǎo)航和打開(kāi)窗口
window.open() 可以導(dǎo)航到新的URL,同時(shí)會(huì)打開(kāi)新的窗口集歇。
二桶略、location對(duì)象
location對(duì)象是用的最多的BOM對(duì)象之一,它很特別诲宇,既是window的屬性际歼,又是document的屬性,所以姑蓝,window.location和document.location引用的是同一個(gè)對(duì)象的鹅心;提供了當(dāng)前窗口中加載的文檔的有關(guān)信息和一些導(dǎo)航功能。
location對(duì)象可以將URL解析為獨(dú)立的片段纺荧。
屬性名 | demo | 說(shuō)明 |
---|---|---|
hash | #topic | URL中的hash |
host | www.xxx.com:80 | 主機(jī)名和端口 |
hostname | www.xxx.com | 主機(jī)名 |
href | https://xxx.baidu.com | 完整的URL |
pathname | /topic/ | URL中的目錄和文件名 |
port | 8080 | 端口號(hào) |
protocol | http | 協(xié)議 |
search | ?type=1 | 查詢(xún)字符串 |
1巴帮、解析查詢(xún)字符串參數(shù)方法可以查看
2、位置操作
打開(kāi)新的URL虐秋, 以下三種方法效果是一樣的榕茧。
window.location = 'www.xxx.com'
location.href = 'www.xxx.com'
location.assign('www.xxx.com')
修改location對(duì)象的屬性,可以改變當(dāng)前加載的頁(yè)面客给。
// 頁(yè)面不會(huì)重新加載
url改為 www.baidu.com#topic
location.hash = '#topic';
url改為 www.baidu.com?type=1
location.search = '?type=1';
url改為 www.xxx.com
location.hostname = 'www.xxx.com';
url改為 www.baidu.com/topic/
location.pathname = 'topic'
url改為 www.baidu.com:8080
location.port = '8080'
以上方式用押,除了hash外,都會(huì)重新加載頁(yè)面靶剑,并且會(huì)在瀏覽器中生成新的記錄蜻拨。
location.replace()方法接收一個(gè)參數(shù)池充,也就是要導(dǎo)航到的URL,該會(huì)替換當(dāng)前的URL缎讼,不會(huì)在瀏覽器生成歷史記錄收夸。
location.reload()方法會(huì)重新加載當(dāng)前頁(yè)面。如果當(dāng)前頁(yè)面沒(méi)有改變過(guò)血崭,若不傳遞參數(shù)卧惜,則會(huì)從瀏覽器緩存中加載,若添加true參數(shù)夹纫,則會(huì)從服務(wù)器加載咽瓷。
三、navigator 對(duì)象
1舰讹、navigator 對(duì)象一般是用來(lái)識(shí)別客戶(hù)端瀏覽器的茅姜。最常用的就是userAgent 屬性。用來(lái)檢測(cè)瀏覽器相關(guān)的信息月匣。比如
navigator.userAgent
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
2钻洒、 檢測(cè)插件
檢測(cè)瀏覽器插件。對(duì)于非IE 使用plugins屬性锄开,值為數(shù)組航唆。數(shù)組每一項(xiàng)為一個(gè)插件實(shí)例,每個(gè)實(shí)例包括name院刁、description糯钙、filename length⊥诵龋可以通過(guò)name來(lái)檢測(cè)瀏覽器是否有某個(gè)插件任岸。
- 非IE檢測(cè)
function hasPlugin(name) {
name = name.toLowerCase();
for (var i = 0; i < navigator.plugins.length; i++) {
if (~navigator.plugins[i].name.toLowerCase().indexOf(name)) {
return true;
}
}
return false;
}
- 檢測(cè)IE唯一的方式是使用專(zhuān)有的ActiveXObject()類(lèi)型,并創(chuàng)建一個(gè)特定的實(shí)例狡刘,使用COM對(duì)象的方式作為唯一標(biāo)識(shí)符享潜。檢測(cè)插件,必須知道該插件的COM標(biāo)識(shí)符嗅蔬。
function hasPluginForIE(name) {
try {
new ActiveXObject(name);
return true
} catch(e) {
return false;
}
}
之所以使用try/catch是因?yàn)槿绻麑?shí)例化不成功就會(huì)拋出錯(cuò)誤剑按。
四、history 對(duì)象
go()方法澜术,接收一個(gè)參數(shù)艺蝴。
1、參數(shù)如果是整數(shù)鸟废,正數(shù)則表示前進(jìn)猜敢,向前跳轉(zhuǎn);負(fù)數(shù)表示后退,向后跳轉(zhuǎn)缩擂。
2鼠冕、參數(shù)如果是字符串,則會(huì)跳轉(zhuǎn)到歷史記錄中包含該字符串的最近位置的URL胯盯。
history.go(2) 前進(jìn)兩個(gè)頁(yè)面
history.go(-1) 后退一個(gè)頁(yè)面
還可以使用back()和forward()代替懈费。
BOM中還有screen對(duì)象,保存著和客戶(hù)端顯示器有關(guān)的信息博脑,一般用于站點(diǎn)的分析憎乙,這里就不擴(kuò)展了。