BOM
浏览器作为JavaScript的重要运行环境,其本身作为一个应用程序需要对其自身进行操作,所以浏览器会有对应的对象模型BOM(Browser Object Model)
我们可以将BOM看成是连接JavaScript和浏览器窗口的桥梁
主要对象模型
windowlocationhistorydocument
window
作为全局对象
- 在全局作用域下通过var声明的变量会添加到全局变量中
- 全局提供了许多内置函数和对象
作为窗口对象
提供大量浏览器属性
localStorage,console,location,history,screenX,scrollX等60+属性
提供大量浏览器方法
alter,close,scrollTop,open等40+方法
提供大量浏览器事件
focus,blur,load,hashchange等30+事件
继承
EventTarget方法addEventListener,removeEventListener,dispatchEventListener
location
属性
hash哈希值host主机地址:主机名+端口号hostname主机名href完整地址origin源:协议+主机名+端口号pathname路径prot端口号protocol协议search查询字符串
方法
assign(url)跳转地址replace(url)替换地址,无法回退reload([boolean])重新加载页面,可选择强制加载
history
访问浏览器曾经的会话历史记录
属性
state当前保留的状态值length会话中记录的条数
方法
go(number)加载历史中的某一页back()返回上一页forward()前进下一页pushState(state,title[,url])在浏览器会话的历史堆栈中添加状态/*可模拟跳转地址,但其实只是状态改变而不会刷新网页,路由就借此实现,通过检测状态的改变而改变组件的渲染state:保存的状态title:跳转后的title,已无效url:状态的地址*/
replaceState(state.title[,url])替换状态
DOM
DOM(Document Object Module)文档对象模型
- DOM提供了一系列模型和对象,用来操作Web页面

EventTarget
addEventListenerremoveEventListenerdispatchEventListener
Node
属性
nodeNamenodeTypenodeValuechildNodes返回子节点NodeList
方法
appendChild()
注意
虽然document继承Node,拥有appendChild()等操作元素方法,但可能浏览器做了特殊处理,不允许直接在document里使用(可能是document里不允许增删改Node元素,只能在document.body的body元素里操作)
Document
Element
Event事件对象
事件监听方式
DOM0
<!-- 方式一 --><div onclick="foo">方式一</div>
/* 方式二 */const div=document.querySelector("div")div.onclick=function(){console.log("foo")}
DOM3
/* 方式三 */const div=document.querySelector("div")div.addEventListener("click",()=>{console.log("foo")})
事件流(事件捕获和冒泡)
早期浏览器开发时,不管是IE还是Netscape公司都发现了这个问题,但是他们采用了完全相反的事件流来对事件进行了传递
IE采用了事件冒泡的方式,Netscape采用了事件捕获的方式
事件对象
常见属性
type事件种类target当前事件发生元素currtTarget当前事件处理元素offsetX,offsetY点击元素的位置
常见方法
preventDefault()取消事件的默认行为stopPropgation()阻止事件的进一步传递
