Browser Object Model,浏览器对象模型。
实质上就是为浏览器建立一个对象模型,该对象提供了一系列的方法(又称API)供开发人员使用。比如:alert()方法。
观察:不同的浏览器调用alert()会有不同的呈现效果,这就是因为alert()的实现效果是由浏览器决定的原因。
目前BOM还没有统一的标准(所以有浏览器兼容性问题),但常用的大部分对象/方法/属性都是相同的。
window.alter('天上地下,唯我独尊!')在BOM中,window就代表浏览器,是JavaScript运行环境中“最顶级”的对象,所以调用window对象的方法和属性,都可以直接省略前面的window。
alert(message):单纯显示message
confirm(message):要求用户确认,返回bool值
prompt(message):返回值接收用户输入
打开一个新窗口
open('http://17bang.ren') //默认_blank,新页面打开 open('http://17bang.ren', '_self') //当前页面打开
href属性:
location.href //获取当前url/href的值 //跳转到“一起帮” location.href='http://17bang.ren'注意这种模式,在BOM/DOM中都非常常见:给属性赋值之后就立即自动执行。以下url部分(segment)也是可以获取和改变的:
location.host //含port,如"localhost:57210" location.hostname //不含port,如"localhost" //端口,如"57210",注意仅根据href解析,不会显示隐藏的默认端口location.port location.pathname //路径,如"/htmlpage.html" location.search //url参数,如"?id=3"
reload([true|false]) 方法:重新加载当前页面
location.reload(true); //清除缓存 location.reload(); //不清除缓存,同reload(false);其他不常用的,页面“跳转”方法:
浏览历史对象
navigator:查看浏览器信息,常用的有:
navigator.language //如:"zh-CN" //以前有开发人员用userAgent判断浏览器,但这是不可靠的…… navigator.userAgent //如:"Mozilla/5.0 (Windows NT 10.0;……
screen:显示器相关信息,如width/height……
观察我们“一起帮”导航栏上有一个闪烁的铃铛,它实际上是每隔若干时间(比如100毫秒)改变一次铃铛的颜色实现的。
这就需要用到两个非常类似的方法:
这里面的handler不是一个数据,而是一个回调函数(复习)
并进一步#理解#为什么需要回调:
function smart() { console.log(`飞哥帅呆了`); } setTimeout(smart, 2000); //setInterval(smart, 500);
注意:在setTimeout()中的smart是没有括号的!@想一想@:如果加了括号会怎样?
有时候你会看到这样的写法:
function smart() { setTimeout(() => { console.log(`飞哥帅呆了`); smart(); }, 500); } smart();
@想一想@:
这样做和setInterval()的区别在哪里呢?可以为每一次执行设置不同的时间间隔:
function smart() { let interval = Math.random()*1000; console.log(interval); setTimeout(() => { console.log(`飞哥帅呆了`); smart(); }, interval); }#试一试#:用setInterval()能不能实现?
假如回调函数需要参数:
function smart(sname) { console.log(sname + '帅呆了'); }@想一想@:怎么办?
首先是可以使用匿名函数包裹(复习):
setInterval(function () { smart('飞哥') }, 100);还可以引入一个(#试一试#:传入两个?会toggle轮换)额外的参数:
setInterval(smart, 1000, '廖光银');
复习并演示执行顺序:
setTimeout(() => { //① console.log(`我在setTimeout中`); //③ }, interval); console.log(`我在setTimeout之后`); //②
这种异步执行的方式很容易让初学者的代码产生bug:
let i= 0; setTimeout(() => { i++; }, 100); console.log(i); //输出的i值是多少?
#理解#:JavaScript是单线程可异步的语言,JavaScript处理异步的方法简单粗暴,把所有的异步方法扔最后面执行
#体会#:线程和异步没有直接关系
有时候我们需要停止定时器的执行,怎么办呢?控制台演示:
注意这个停止执行何时触发/被调用?
let i = 0; let timerId = setInterval(function () { i++; console.log('小伙子帅呆了……'); }, 200) // if (i > 5) { clearInterval(timerId); // }演示定时器:
定时器还可以配合Ajax实现短轮询。
本章作业名为:bom.html
多快好省!前端后端,线上线下,名师精讲
更多了解 加: