BOM
1、window对象
BOM的核心对象是window,他表示浏览器的一个实例。在浏览器中,window对象有双重角色,他既是通过JavaScript访问浏览器窗口的一个接口,又在ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量、和函数,都以window作为其Global对象,因此有权访问parseInt()等方法。
1.1全局作用域
由于window对象同时扮演着ECMAScript中的Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。
var age = 21;
function sayAge (){
alert (this.age);
}
alert (window.age); //21
sayAge (); //21
window.sayAge (); //21
全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。
var age = 21;
window.color = "red";
//在IE<9时抛出错误,在其他浏览器中是false
delete window.age;
//在IE>9是抛出错误,在其他浏览器中是true
delete window.color; //returns true
alert (window.age); //21
alert (window.color); //undefined
1.2窗口关系及框架
如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引或者框架名称来访问相应的window对象。每个window对象都有一个name属性,之中包含框架的名称。
<frameset rows = "160,*">
<frame src = "frame.htm" name = "topFrame">
<frameset cols = "50%,50%">
<frame src = "anotherframe.htm" name = "leftFrame">
<frame src = "yetanotherframe.htm" name = "rightFrame">
</frameset>
</frameset>
1.3导航和打开窗口
使用window.open()方法既可以导航到一个特定的URL,也可以打开一个新的浏览器窗口。这个方法可以接收四个参数,要加载的URL,窗口目标,一个特性字符串以及一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值,通常只需传递第一个参数,最后一个参数只在不打开新窗口的情况下使用。
如果为window.open()传递了第二个参数,而且该参数是已有窗口或框架的名称,就会在具有该名称的窗口或框架中加载第一个参数指定的URL。
```c
window.open ("https://www.baidu.com/");
1.4、间歇调用和超时调用
JavaScript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行,前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。
超时调用需要使用window对象的setTimeout()方法,它接受两个参数,要执行的代码和以毫秒表示的时间,其中第一个参数可以是一个包含JavaScript代码的字符串,也可以是一个函数。
setTimeout ("alert ('Hello world!')",1000);
setTimeout (function){
alert ("hello world");
},1000);
间歇调用与超时调用类似,只不过他会按照指定的时间间隔重复执行代码,纸质件写调用被取消或者页面被卸载。设置简写间歇调用的方法是setInterval(),它接受的参数与setTimeout()相同,要执行的代码和每次执行之前需要等待的毫秒数。
setInterval ("alert ("hello world ")",10000);
setInterval (function) {
alter ("hello world");
};10000);
2、location对象
location是BOM最有用的对象之一,它提供了当前窗口中加载的文档有关的信息,还提供了一些导航功能。location对象的用处不只表现在他保存着当前文档的信息,还表现在他讲URL解析为独立的片段,让开发人员可以通过不同的属性访问这个片段。
2.1、查询字符串参数
创建一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象。
function getQueryStringArgs (){
var qs = (location.search.length >0?location.search.substring (1) :""),
args = {},
items = qs.length ? qs.split ("&"):[],
items = null,
name = null,
value = null,
i = 0,
len = item.length;
for (i=0;i<len;i++){
item = items[i].split ("=");
name = docodeUPIComponent (item[0]);
value = docodeUPIComponent (item[1]);
if (name.length){
args[name]=value;
}
}
return args;
}
2.2、位置操作
使用location对象可以通过很多方式来改变浏览器的位置,首先,就是使用assign()方法并为其传递一个URL
location.assign ("https://www.baidu.com/");