上一章我们详细讲解了JS中内置的基本对象,本章我们将学习JS中的window对象。

本节我们开始认识Window对象,包括它的结构和一些常见的使用场景。

我们知道,window和Location、Navigator、History、Screen是BOM的一些核心对象,Window的结构如下:

Window (浏览器窗口实例 - 全局对象)
│
├──  浏览器环境属性
│   ├── window.self (返回窗口自身引用)
│   ├── window.name (窗口名称)
│   ├── window.closed (窗口是否关闭)
│   ├── window.opener (打开此窗口的窗口引用)
│   ├── window.parent (父窗口,iframe中使用)
│   ├── window.top (最顶层窗口)
│   └── window.frames (子框架集合)
│
├──  窗口尺寸和位置
│   ├── window.innerWidth / window.innerHeight (视口尺寸,包含滚动条)
│   ├── window.outerWidth / window.outerHeight (整个窗口尺寸)
│   ├── window.screenX / window.screenY (窗口相对于屏幕的位置)
│   ├── window.pageXOffset / window.pageYOffset (页面滚动位置)
│   ├── window.scrollX / window.scrollY (滚动位置,pageXOffset别名)
│   └── window.devicePixelRatio (设备像素比)
│
├──  定时器方法
│   ├── window.setTimeout(callback, delay)
│   ├── window.setInterval(callback, delay)
│   ├── window.clearTimeout(timeoutID)
│   └── window.clearInterval(intervalID)
│
├──  导航和URL (Location)
│   ├── window.location.href (完整URL)
│   ├── window.location.protocol (协议 http: / https:)
│   ├── window.location.host (主机名+端口)
│   ├── window.location.hostname (主机名)
│   ├── window.location.port (端口)
│   ├── window.location.pathname (路径)
│   ├── window.location.search (查询参数 ?key=value)
│   ├── window.location.hash (锚点 #section)
│   ├── window.location.origin (源)
│   ├── window.location.assign(url) (跳转)
│   ├── window.location.replace(url) (替换当前页)
│   └── window.location.reload() (重新加载)
│
├──  浏览历史 (History)
│   ├── window.history.length (历史记录数量)
│   ├── window.history.back() (后退)
│   ├── window.history.forward() (前进)
│   ├── window.history.go(n) (前进/后退n步)
│   ├── window.history.pushState(state, title, url) (添加历史记录)
│   └── window.history.replaceState(state, title, url) (替换当前历史记录)
│
├──  浏览器信息 (Navigator)
│   ├── window.navigator.userAgent (用户代理字符串)
│   ├── window.navigator.platform (操作系统平台)
│   ├── window.navigator.language (浏览器语言)
│   ├── window.navigator.cookieEnabled (Cookie是否启用)
│   ├── window.navigator.onLine (是否在线)
│   ├── window.navigator.geolocation (地理位置API)
│   ├── window.navigator.clipboard (剪贴板API)
│   └── window.navigator.mediaDevices (媒体设备)
│
├──  屏幕信息 (Screen)
│   ├── window.screen.width / window.screen.height (屏幕分辨率)
│   ├── window.screen.availWidth / window.screen.availHeight (可用区域)
│   ├── window.screen.colorDepth (颜色深度)
│   ├── window.screen.pixelDepth (像素深度)
│   └── window.screen.orientation (屏幕方向)
│
├── 📄 文档对象 (Document - DOM根节点)
│   ├── window.document.getElementById()
│   ├── window.document.querySelector()
│   ├── window.document.createElement()
│   ├── window.document.body
│   ├── window.document.head
│   └── ... (所有DOM方法)
│
├──  数据存储
│   ├── window.localStorage (本地存储)
│   │   ├── setItem(key, value)
│   │   ├── getItem(key)
│   │   ├── removeItem(key)
│   │   └── clear()
│   ├── window.sessionStorage (会话存储)
│   │   ├── setItem(key, value)
│   │   ├── getItem(key)
│   │   ├── removeItem(key)
│   │   └── clear()
│   └── window.indexedDB (索引数据库)
│
├──  事件系统
│   ├── 窗口事件
│   │   ├── window.onload
│   │   ├── window.onresize
│   │   ├── window.onscroll
│   │   ├── window.onbeforeunload
│   │   └── window.onunload
│   ├── 焦点事件
│   │   ├── window.onfocus
│   │   └── window.onblur
│   └── 消息事件
│       ├── window.onmessage
│       └── window.onstorage
│
├──  控制台 (Console)
│   ├── window.console.log()
│   ├── window.console.error()
│   ├── window.console.warn()
│   ├── window.console.table()
│   ├── window.console.time() / timeEnd()
│   └── window.console.clear()
│
├──  数字和数学
│   ├── window.Math (数学对象)
│   │   ├── Math.PI, Math.E
│   │   ├── Math.random()
│   │   ├── Math.floor(), Math.ceil()
│   │   └── Math.max(), Math.min()
│   ├── window.Number
│   └── window.parseInt(), parseFloat()
│
├──  全局对象
│   ├── window.Object
│   ├── window.Array
│   ├── window.String
│   ├── window.Boolean
│   ├── window.Date
│   ├── window.RegExp
│   ├── window.JSON
│   └── window.Promise
│
├──  异步API
│   ├── window.fetch() (Fetch API)
│   ├── window.XMLHttpRequest (XHR)
│   ├── window.WebSocket
│   ├── window.Worker (Web Workers)
│   └── window.requestAnimationFrame()
│
└──  对话框
    ├── window.alert()
    ├── window.confirm()
    ├── window.prompt()
    └── window.print()

值得注意的是:由于 window 是 BOM 的全局对象,其属性和方法可以直接调用,不需要写 window. 前缀。(比如我们常见的‘console.log()’控制台打印,就没有全写‘window.console.log()’)

下面我们简单介绍一些JS中window对象的常见使用场景。

窗口大小和位置:通过window.innerWidth和window.innerHeight可以获取浏览器可见区域的宽度和高度。而window.pageXOffset和window.pageYOffset可以获取文档滚动条的偏移量,用于确定用户在页面中的位置。

console.log(innerWidth,innerHeight);//通过两个属性就可以看到浏览器的视口宽高了
console.log(pageXOffset,pageYOffset);//HTML没有元素默认是0

弹窗和对话框:window对象提供了许多方法用于创建弹窗和对话框。例如,window.alert()用于显示一个警告框,window.confirm()用于显示一个确认框,window.prompt()用于显示一个输入框。

/* window.alert-警告框 */
alert('警告框')
/* window.confirm确认框 */
const flag = confirm();//有返回值:点击"确定"返回true,点击"取消"或关闭对话框返回false
/* window.prompt输入框 */
const get=prompt();//有返回值:点击"确定"返回输入字符串(空字符串也算),点击"取消"或关闭返回null

导航和浏览历史:window对象可以通过window.location属性来获取和设置当前页面的URL地址。此外,还可以使用window.history对象来管理浏览器的前进和后退操作。

console.log(location.href);//获取当前URL,比如我这里会打印:file:///C:/Users/dotcpp/Desktop/Dotcpp_JS/Dotcpp.html

定时器:window对象提供了用于执行定时任务的方法,例如window.setTimeout()和window.setInterval()。这些方法可以用来延迟执行代码或周期性地执行代码。

/* 每1s打印并自增全局变量cnt */
let cnt =0
/* 设置定时器 */
const timer=setInterval(function(){
console.log(++cnt);
if(cnt===10)clearInterval(timer)//定时器记得及时清理,否则会造成内存泄漏
},1000)

其他功能:window对象还提供了其他许多功能,如访问和操作浏览器的cookie信息、设置和获取浏览器的标题栏文字、跨窗口通信等。

总结:Window 对象是浏览器环境的全局入口和指挥中心,掌控着整个网页的生命周期、用户交互和浏览器功能,所以读者要学习并熟练掌握window的基本属性和方法。

点赞(176)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)