← 返回目录

1. BOM 概念与 window 顶层对象

BOM 就是浏览器对象模型,window 是顶层对象,所有全局变量都挂在它上面。

核心五个:
window——浏览器窗口,顶层对象
document——DOM
location——地址栏
history——历史记录
navigator——浏览器信息

坑:全局变量就是 window 的属性、window 可省略不写、BOM 没有统一标准

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

点按钮:上方画面分步动,下方黑框打出对应代码 + 蓝色结果句。

1.2 知识点讲解

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

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

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();

// 把当前窗口挪到屏幕坐标 (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:查浏览器信息

// 浏览器自我介绍的一大串暗号(设备+浏览器)
navigator.userAgent;

// 你用的什么操作系统,比如 Win32
navigator.platform;

// 系统默认语言,比如 zh-CN
navigator.language;

// 浏览器有没有开 Cookie,true / false
navigator.cookieEnabled;

// 浏览器叫什么名字
navigator.appName;

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

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

本页重点

API作用参数返回值代码示例
window浏览器最大全局对象,顶层变量都挂它身上window 本身console.log(window.location); // 顶层变量都挂在它身上
window.open(url, target, features)开一个新窗口网址、在哪开、窗口长啥样新窗口的 window 对象let w = window.open('https://www.baidu.com', '_blank'); // 开新窗口
window.close()关脚本自己开的窗口undefinedw.close(); // 关掉刚开的窗口
alert(提示)警告弹窗,只有一个确定按钮提示文字undefinedalert('你好,这是警告框');
confirm(提示)确认弹窗,确定/取消两个按钮提示文字点确定 true,点取消 falselet ok = confirm('确定要提交吗?'); // 确定 true,取消 false
prompt(提示, 默认值)输入弹窗,能打字提示文字、默认值输入的字,取消是 nulllet name = prompt('请输入姓名', '张三'); // 拿到输入的字
navigator.userAgent浏览器自报的设备+浏览器信息一长串字符串console.log(navigator.userAgent); // 浏览器自报家门
navigator.platform你用的什么操作系统如 Win32、MacIntelconsole.log(navigator.platform); // 你用的什么系统