BOM全称Browser Object Model(浏览器对象模型), 它提供了与浏览器窗口交互的对象和方法. 简单来说:
- DOM: 操作网页内容(HTML元素). 
- BOM: 操作浏览器窗口和行为. 
 
 
想象一下, DOM是你房间里的家具(可以移动、修改), 而BOM是你房间的窗户和门(可以打开、关闭、调整大小).
BOM的核心是window对象, 它是JavaScript在浏览器中的全局对象. 我们常用的alert()、setTimeout()其实都是window的方法.
二、window对象
window对象有两个重要身份:
- 全局对象:在浏览器中, 所有全局变量和函数都是- window的属性和方法.
 
- 浏览器窗口: 代表浏览器窗口或标签页. 
var myVar = "Hello";
console.log(window.myVar); console.log(myVar === window.myVar); 
function sayHi() {  console.log("Hi!");}
window.sayHi(); 
2.1 常用window属性
让我们看看window对象有哪些实用的属性:
1) window.innerWidth/window.innerHeight: 获取浏览器窗口的内部宽度和高度(不包括工具栏和滚动条)
2) window.outerWidth/window.outerHeight: 获取整个浏览器窗口的宽度和高度
3) window.location: 获取当前页面的URL信息
4) window.navigator: 获取浏览器信息, 例如: window.navigator.userAgent
5) window.screen: 获取用户屏幕信息, 例如: window.screen.width, window.screen.height
2.2 常用window方法
window对象提供了许多实用的方法:
- 弹窗类: - alert(): 警告框
 - confirm(): 确认框(返回true/false)
 - prompt(): 输入框(返回用户输入或null)
 
 
 
- 定时器: - setTimeout(): 延迟执行
 - setInterval(): 循环执行
 - clearTimeout()/- clearInterval(): 清除定时器
 
 
 
- 窗口操作: - open():打开新窗口
 - close(): 关闭窗口
 - moveTo()/- moveBy(): 移动窗口
 - resizeTo()/- resizeBy(): 调整窗口大小
 
2.3 浏览器窗口操作示例
1) 打开新窗口:
const newWindow = window.open(  "https://www.example.com",    "exampleWindow",             "width=600,height=400"     );
参数说明:
窗口规格常用选项: 
2)关闭窗口: 
window.close();
newWindow.close();
通常只能关闭由JavaScript打开的窗口, 浏览器出于安全限制, 不允许脚本随意关闭用户打开的窗口. 
3) 调整窗口的大小和位置: 
window.moveTo(100, 200);
window.moveBy(50, 30);
window.resizeTo(800, 600);
window.resizeBy(100, -50);
出于用户体验和安全考虑, 这些方法通常只能用于由window.open()创建的窗口, 或需要用户先与页面交互后才能使用.
if (newWindow.closed) {  console.log("新窗口已关闭");}
window.focus();
window.blur();
var globalVar = "我是全局变量";
console.log(globalVar);        console.log(window.globalVar); 
function globalFunc() {  console.log("我是全局函数");}
globalFunc();        window.globalFunc(); 
ES6的let和const声明的变量不会成为window的属性: let localLet = "我是let变量";const localConst = "我是const常量";
console.log(window.localLet);   console.log(window.localConst); 
function enterFullscreen() {  const element = document.documentElement;  if (element.requestFullscreen) {    element.requestFullscreen();  } else if (element.webkitRequestFullscreen) {     element.webkitRequestFullscreen();  } else if (element.msRequestFullscreen) {     element.msRequestFullscreen();  }}
function exitFullscreen() {  if (document.exitFullscreen) {    document.exitFullscreen();  } else if (document.webkitExitFullscreen) {     document.webkitExitFullscreen();  } else if (document.msExitFullscreen) {     document.msExitFullscreen();  }}
window.addEventListener("resize", () => {  console.log(`窗口大小已改变:${window.innerWidth} x ${window.innerHeight}`);
    if (window.innerWidth < 768) {    console.log("小屏幕布局");  } else {    console.log("大屏幕布局");  }});
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
window.scrollTo({  top: 500,  behavior: "smooth"});
function scrollToTop() {  window.scrollTo({ top: 0, behavior: "smooth" });}
function scrollToBottom() {  window.scrollTo({     top: document.body.scrollHeight,     behavior: "smooth"   });}
好了, 今天的文章就讲到这里了, 记住, 虽然window对象功能强大, 但现代Web开发更强调用户体验, 很多传统的窗口操作(如频繁弹窗)已经不推荐使用. 合理利用这些API, 可以创建既功能强大又用户友好的Web应用.
阅读原文:原文链接
该文章在 2025/7/17 10:09:34 编辑过