← 返回目录

1. BOM 概念与 window 顶层对象

先把 BOM 想成"浏览器给 JS 发的遥控器":按下按钮(调 API),就能让浏览器弹窗、跳页、告诉你屏幕多大、查历史记录。遥控器的"总开关"就是 window——所有全局变量、甚至 document 都是挂在它身上的

1.1 互动演示(window / navigator / 弹窗 / 开窗口)

点按钮体验:全局变量挂载、浏览器信息、开新窗口、三种弹窗的返回值差异。

1.2 知识点讲解

① BOM 是什么?window 又是什么?

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:开新窗口(参数逐个讲)

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 且包含宽高/位置时,才可能弹出"独立小窗口";否则默认开新标签页。实际开发中弹窗常被浏览器拦截,要提示用户允许。

③ 窗口方法:close / moveTo / resizeTo(安全限制)

// 注意:只有"脚本自己打开的窗口"才能关、能挪、能改大小!
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:查浏览器信息

navigator.userAgent; // 浏览器自我介绍的一大串暗号(设备+浏览器)
navigator.platform; // 你用的什么操作系统,比如 Win32
navigator.language; // 系统默认语言,比如 zh-CN
navigator.cookieEnabled; // 浏览器有没有开 Cookie,true / false
navigator.appName; // 浏览器叫什么名字

navigator 的信息可以被浏览器或插件"说谎"(篡改),所以不能拿它精准判断浏览器版本,了解一下就行。

一句话记住:BOM=浏览器遥控器,window 是总开关;全局变量都挂 window;open/close 只管脚本开的窗口;confirm 返回 true/false、prompt 取消返回 null