1.全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。
2.取得窗口相对于屏幕左边和上边的位置:
* screenLeft、screenRight(除FF)
* screenX、screenY(FF)
以下代码可以跨浏览器取得窗口左边和上边位置(仍存在兼容性问题,建议不要使用)
var leftPos = (typeof window.screenLeft == 'number') ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == 'number') ? window.screenTop : window.screenY;
3.移动\调整浏览器窗体的方法:window.moveTo()、window.moveBy()和window.resizeTo、window.resizeBy同样不被所有浏览器所支持。
4.window对象的innerWidth\innerHeight\outerWidth\outerHeight属性同样存在兼容性问题,***通常使用document.documentElement.clientWidth和document.documentElement.clientHeight获取视口宽高***。
5.window.open()方法接受四个参数:要加载的URL(本域路径)、窗口目标(相当于a标签的target属性)、一个特性字符串以及一个表示新页面是否取代浏览器历史纪录中当前加载页面的布尔值。
如果给window.open()传递的第二个参数并不是一个已经存在的窗口或框架,那么该方法就会根据在第三个参数位置上传入的字符串创建一个新窗口或新标签页。如果没有传入第三个参数,那么就会打开一个带有全部默认设置(工具栏、地址栏和状态栏等)的新浏览器窗口(或者打开一个新标签页--根据浏览器设置)。在不打开新窗口的情况下,会自动忽略第三个参数。详见P200表格。
6.window.open()方法返回一个指向新窗口的引用,这个新窗口通常解除了对移动、调整浏览器窗口方法的限制,而且可以使用window.close()方法关闭它。
7.尽量不要将要执行的代码的字符串表示直接传入setTimeout()中,以避免可能导致的性能损失**。第二个参数是一个表示等待多长时间的毫秒数,但经过该时间后指定的代码不一定会执行,这个参数只是告诉JavaScript再过多长时间把当前任务添加到队列中。**
**关于setTimeout的使用有两个需要注意的地方:一是第一个参数传入的字符串相当于调用了eval()方法。二是这个代码的运行环境是全局作用域,因此要注意是否调用了局部作用域命名的函数。***
8.***一般认为,使用超时调用来模拟间歇调用是一种最佳模式,在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动(基于js阻塞等原因)***。
9.浏览器通过alert()、confirm()、prompt()方法可以调用系统对话框向用户显示消息。这几个方法打开的对话框都是同步和模态的,也就是说,显示这些对话框的时候代码会停止执行,而关掉这些对话框后代码又会恢复执行。
10.confirm()的典型用法如下:
~~~
if (confirm('吃饭了吗?')){
alert('这么早就吃了');
} else {
alert('一起去吃个饭吧');
}
~~~
11.prompt()方法显示一个文本域,以供用户在其中输入内容。该方法接收两个参数:要显示给用户的文本提示和文本输入域的默认值(可以是一个空字符串)。如果用户点击了OK,则prompt()反悔文本输入域的值;如果用户点击了cancel或通过其他方式关闭了对话框,则返回null。
12.window.print()方法打开浏览器打印对话框。
13.location对象的用处不止表现在它保存着当前文档的信息,还表现在它将URL解析为独立的片段,让开发人员可以通过不同的属性访问这些片段。location对象的所有属性见P207。
14.尽管location.search返回从问号到URL末尾的所有内容,但却没办法逐个访问其中的每个查询字符串参数。为此,可以像下面这样创建一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象:
function getQueryStringArgs(){
//取得查询字符串并去掉开头的问号
var qs = (location.search.length>0 ? location.search.substring(1) : ''),
//保存数据的对象
args = {},
//取得每一项
itmes = qs.length ? qs.split('&') : [],
item = null,
name = null,
value = null,
//在for循环中使用
i = 0,
len = items.length;
//逐个将每一项添加到args对象中
for (i = 0;i<len;i++){
item = items[i].split('=');
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}
15.使用location对象可以通过很多方式来改变浏览器当前访问路径,如:
location.assign('http://www.baidu.com');
window.location = 'http://www.baidu.com';
***location.href = 'http://www.baidu.com'; (最常用)***
另外,修改location对象的其他属性也可以改变当前加载的页面,但通常来修改这些属性会使页面以新URL重新加载并产生新的历史记录。要禁用这种行为,可以使用***location.replace()***方法。
16.***location.reload()***方法可以重新加载当前页面,若不传入参数则有可能从缓存中加载,若传入true则会强制从服务器重新加载。
17.navigator对象是目前识别客户端浏览器的事实标准。
18.navigator对象的plugins属性保存着一个记录浏览器插件信息集合的数组。关于插件检测的更多内容见P211。
19.navigator对象的registerContentHandler()和registerProtocolHandler()方法可以让一个站点指明他可以处理特定类型的信息。随着RSS阅读器和在线电子邮件的星期,注册处理程序就像为使用桌面应用程序一样默认使用这些在线应用程序提供了一种方式。详见P213。
20.history对象常用于创建自定义的‘前进’、‘后退’按钮,以及检测当前页面是不是用户历史纪录中的第一个页面。
~~~
//前进2页
history.go(2);
//后退1页
history.go(-1);
~~~
~~~
if (history.length == 0) {
//这应该就是用户打开窗口的第一个页面
}
~~~