一、核心概念与定位
window
对象是浏览器环境中 JavaScript 的全局对象,代表浏览器窗口(或标签页),也是前端 JavaScript 执行的顶级上下文。在浏览器中,所有全局变量、函数、DOM/BOM API 都属于 window
的属性或方法(如 document
、setTimeout
本质是 window.document
、window.setTimeout
)。
二、核心功能与属性方法
1. DOM 操作相关
document
属性:指向当前页面的 DOM 文档(window.document === document
),是操作页面元素的入口(如getElementById
、createElement
)。window.innerWidth/innerHeight
:获取窗口可视区域宽度/高度(含滚动条时的内部尺寸)。window.scrollX/scrollY
:获取页面滚动的水平/垂直距离(ES6 后推荐用window.scrollTo()
或element.scrollIntoView()
操作滚动)。
2. BOM(浏览器对象模型)控制
- 窗口导航:
window.location
:操作 URL(如location.href
跳转页面,location.reload()
刷新)。window.history
:操作浏览器历史记录(history.back()
回退,history.pushState()
实现无刷新路由)。
- 窗口操作:
window.open(url, target)
:打开新窗口(如window.open('_blank')
)。window.close()
:关闭当前窗口(仅能关闭通过 JS 打开的窗口)。
3. 定时器与异步控制
setTimeout(callback, delay)
:延迟指定毫秒后执行回调(返回定时器ID,可通过clearTimeout
取消)。setInterval(callback, delay)
:周期性执行回调(通过clearInterval
取消)。requestAnimationFrame(callback)
:浏览器下一帧绘制前执行回调(动画优化首选)。
4. 全局上下文与作用域
- 在浏览器环境中,全局变量会自动成为
window
的属性(如var a = 1
等价于window.a = 1
),但let/const
声明的变量不会挂载到window
上。 - 函数中的
this
在非严格模式下默认指向window
(如function fn() { console.log(this); } fn(); // 输出 window
)。
5. 浏览器事件与交互
- 事件监听:
window.addEventListener('resize', () => { /* 窗口大小变化时触发 */ })
。window.addEventListener('scroll', () => { /* 页面滚动时触发 */ })
。
- 用户交互方法:
window.confirm('确认操作?')
:弹出确认对话框(返回布尔值)。window.prompt('请输入内容', '默认值')
:弹出输入框(返回用户输入)。
三、与其他环境的差异(Node.js)
- 浏览器环境:
window
是全局对象,包含 DOM/BOM 相关 API。 - Node.js 环境:全局对象是
global
,无window
、document
等浏览器特有的对象,取而代之的是fs
、http
等服务器端模块。
四、问题
1. window.onload
和 DOMContentLoaded
的区别?
DOMContentLoaded
:当 HTML 解析完成、DOM 树构建完毕时触发(不等待图片、样式表等资源加载)。window.onload
:当所有资源(图片、脚本、样式表等)加载完成后触发,触发时机更晚。
2. 如何在 Node.js 中模拟 window
对象?
- 若需在 Node 中运行浏览器端代码(如测试),可通过
jsdom
库创建虚拟 DOM 环境,其会模拟window
、document
等对象。
3. window
对象的性能优化场景?
- 事件防抖/节流:在
scroll
、resize
等高频事件中,通过debounce
或throttle
减少回调执行频率(如滚动加载图片时)。 - 避免全局污染:将变量挂载到
window
上时,使用命名空间(如window.myApp = {}
),避免与其他库冲突。
五、总结
window
对象是浏览器端 JavaScript 的核心入口,整合了 DOM 操作、浏览器控制、异步处理等能力。理解其属性方法及与全局作用域的关系,是掌握前端浏览器编程的基础,也是框架底层实现(如事件循环、路由机制)的重要知识支撑。