先把 BOM 想成"浏览器给 JS 发的遥控器":按下按钮(调 API),就能让浏览器弹窗、跳页、告诉你屏幕多大、查历史记录。遥控器的"总开关"就是 window——所有全局变量、甚至 document 都是挂在它身上的。
BOM 全称 Browser Object Model(浏览器对象模型)。它就是把浏览器"变成对象"给你用。没有它,你的 JS 就只能算算数、改改页面里的字;有了它,才能控制浏览器本身。
window 是整个 BOM 的顶层(最大的那个盒子),下面装着 screen(屏幕)、location(地址)、history(历史)、navigator(浏览器信息),连我们之前学的 document(页面文档)都是 window 的一个属性。
// 你在页面最顶上写的变量,浏览器会自动挂到 window 这个大遥控器上
let userName = "张三"; // 这是个全局变量,谁都能用
console.log(window.userName); // 从 window 上把它取下来,还是 "张三"
// 全局函数也一样挂在 window 上
function sayHi() {} // 随手定义一个函数
console.log(window.sayHi); // window 上能找到这个函数
// document 本身也是 window 身上的一个属性
console.log(window.document === document); // true(同一个东西,两种写法)
// 平时写 location、history,其实是省略了 window.
// 完整写法是 window.location,简写就是 location
为什么全局变量能"到处用"?因为所有全局变量都挂在 window 上,任何地方都能通过 window 找到它。这也是为什么"全局变量要少用"——挂在最大盒子上的东西谁都碰得到,容易互相干扰。
window.open 有三个参数,从左到右分别是:开哪个页面(url)、在哪开(target)、窗口长什么样(features)。
// 完整写法:window.open 有三个参数 let win = window.open( "https://www.baidu.com", // 参数一:要打开哪个网址 "_blank", // 参数二:_blank 表示新开一个标签页 "width=800,height=600,left=100,top=50" // 参数三:新窗口长啥样、放哪 );
参数二 target 的可选值:_blank 新标签页(默认)、_self 当前页替换、_parent 父级框架、_top 顶层框架。
参数三 features 常用特征值(逗号分隔的字符串):
| 特征 | 作用 | 示例 |
|---|---|---|
| width / height | 窗口宽度 / 高度(像素) | width=800,height=600 |
| left / top | 距屏幕左侧 / 顶部距离 | left=100,top=50 |
| menubar / toolbar | 是否显示菜单栏 / 工具栏 | menubar=no,toolbar=no |
| location | 是否显示地址栏 | location=yes |
| scrollbars | 是否允许滚动条 | scrollbars=yes |
| resizable | 是否允许调整窗口大小 | resizable=yes |
注意:只有传了 features 且包含宽高/位置时,才可能弹出"独立小窗口";否则默认开新标签页。实际开发中弹窗常被浏览器拦截,要提示用户允许。
// 注意:只有"脚本自己打开的窗口"才能关、能挪、能改大小!
let win = window.open("https://www.baidu.com", "", "width=800,height=600"); // 先开个新窗口
win.close(); // 把刚开的这个窗口关掉
window.moveTo(100, 100); // 把当前窗口挪到屏幕坐标 (100,100)
window.resizeTo(800, 600); // 把当前窗口改成 800×600
用户自己点的链接打开的标签页,脚本无权 window.close——这是浏览器安全限制。做作业时常遇到"关不掉",不是代码错了,是浏览器不让。
// 1. alert:警告弹窗,只有一个"确定"按钮
// 它不返回任何东西,点完就是 undefined
alert("提示文字"); // 弹个警告框,你点确定它就完事了
// 2. confirm:确认弹窗,有"确定""取消"两个按钮
let ok = confirm("确定删除吗?"); // 你点了哪个,它就把结果告诉你
// 点"确定" → ok 是 true;点"取消" → ok 是 false
// 常用来做"删之前先问一句"
// 3. prompt:输入弹窗,可以在里面填字
let text = prompt("请输入姓名", "默认值"); // 弹个框让你打字
// 点"确定" → text 是你刚打的字(没打就用默认值)
// 点"取消" → text 是 null(空)
prompt 点取消返回 null,必须判断再使用,比如 text.length 会直接报错(null 没有 length)。作业里让"在注释里记录返回值"就是为了加深这个印象。
navigator.userAgent; // 浏览器自我介绍的一大串暗号(设备+浏览器) navigator.platform; // 你用的什么操作系统,比如 Win32 navigator.language; // 系统默认语言,比如 zh-CN navigator.cookieEnabled; // 浏览器有没有开 Cookie,true / false navigator.appName; // 浏览器叫什么名字
navigator 的信息可以被浏览器或插件"说谎"(篡改),所以不能拿它精准判断浏览器版本,了解一下就行。