BOM 就是浏览器对象模型,window 是顶层对象,所有全局变量都挂在它上面。
核心五个:
① window——浏览器窗口,顶层对象
② document——DOM
③ location——地址栏
④ history——历史记录
⑤ navigator——浏览器信息
坑:全局变量就是 window 的属性、window 可省略不写、BOM 没有统一标准。
BOM 全称 Browser Object Model(浏览器对象模型)。它就是把浏览器"变成对象"给你用。没有它,你的 JS 就只能算算数、改改页面里的字;有了它,才能控制浏览器本身。
window 是整个 BOM 的顶层(最大的那个盒子),下面装着 screen(屏幕)、location(地址)、history(历史)、navigator(浏览器信息),连我们之前学的 document(页面文档)都是 window 的一个属性。
// 你在页面最顶上写的变量,浏览器会自动挂到 window 这个大遥控器上
// 这是个全局变量,谁都能用
let userName = "张三";
// 从 window 上把它取下来,还是 "张三"
console.log(window.userName);
// 全局函数也一样挂在 window 上
// 随手定义一个函数
function sayHi() {}
// window 上能找到这个函数
console.log(window.sayHi);
// document 本身也是 window 身上的一个属性
// true(同一个东西,两种写法)
console.log(window.document === document);
// 平时写 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();
// 把当前窗口挪到屏幕坐标 (100,100)
window.moveTo(100, 100);
// 把当前窗口改成 800×600
window.resizeTo(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; // 你用的什么操作系统,比如 Win32 navigator.platform; // 系统默认语言,比如 zh-CN navigator.language; // 浏览器有没有开 Cookie,true / false navigator.cookieEnabled; // 浏览器叫什么名字 navigator.appName;
navigator 的信息可以被浏览器或插件"说谎"(篡改),所以不能拿它精准判断浏览器版本,了解一下就行。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| window | 浏览器最大全局对象,顶层变量都挂它身上 | 无 | window 本身 | console.log(window.location); // 顶层变量都挂在它身上 |
| window.open(url, target, features) | 开一个新窗口 | 网址、在哪开、窗口长啥样 | 新窗口的 window 对象 | let w = window.open('https://www.baidu.com', '_blank'); // 开新窗口 |
| window.close() | 关脚本自己开的窗口 | 无 | undefined | w.close(); // 关掉刚开的窗口 |
| alert(提示) | 警告弹窗,只有一个确定按钮 | 提示文字 | undefined | alert('你好,这是警告框'); |
| confirm(提示) | 确认弹窗,确定/取消两个按钮 | 提示文字 | 点确定 true,点取消 false | let ok = confirm('确定要提交吗?'); // 确定 true,取消 false |
| prompt(提示, 默认值) | 输入弹窗,能打字 | 提示文字、默认值 | 输入的字,取消是 null | let name = prompt('请输入姓名', '张三'); // 拿到输入的字 |
| navigator.userAgent | 浏览器自报的设备+浏览器信息 | 无 | 一长串字符串 | console.log(navigator.userAgent); // 浏览器自报家门 |
| navigator.platform | 你用的什么操作系统 | 无 | 如 Win32、MacIntel | console.log(navigator.platform); // 你用的什么系统 |