Web API 学习笔记(5):BOM 操作与本地存储
Web API 学习笔记(5):BOM 操作与本地存储
woodfishwindow 对象
(一)核心概念
BOM(Browser Object Model)即浏览器对象模型,window
对象是 BOM 的顶级对象,也是 JavaScript 中的全局对象。
(二)用法
document
、alert()
、console.log()
等都是window
的属性,基本 BOM 的属性和方法大多是window
的,调用时可省略window
。- 所有通过
var
定义在全局作用域中的变量、函数都会变成window
对象的属性和方法。
(三)案例
略(笔记中相关属性和方法调用示例较多)
(四)拓展
window
对象还有一些其他属性和方法,如window.innerWidth
获取窗口内部宽度,window.open()
打开新窗口等,在网页布局和交互中有广泛应用。
定时器 - 延迟函数
(一)核心概念
setTimeout
是 JavaScript 内置的用于延迟执行代码的函数,只执行一次;setInterval
为间歇函数,每隔一段时间执行一次。
(二)用法
setTimeout
语法:setTimeout(回调函数, 延迟时间)
,延迟时间单位为毫秒。
1 | let timerId = setTimeout(function () { |
setInterval
语法:setInterval(回调函数, 间隔时间)
1 | let intervalId = setInterval(function () { |
清除延时函数:clearTimeout(timerId)
用于清除setTimeout
设置的定时器,clearInterval(intervalId)
用于清除setInterval
设置的定时器。
(三)案例
1 | <body> |
(四)拓展
定时器在动画效果、轮播图等网页交互效果实现中经常用到,合理设置定时器的时间间隔和逻辑,能提升用户体验。
location 对象
(一)核心概念
location
对象拆分并保存了 URL 地址的各个组成部分,用于操作和获取当前页面的地址信息。
(二)用法
属性 / 方法 | 说明 |
---|---|
href |
属性,获取完整的 URL 地址,赋值时用于地址的跳转 |
search |
属性,获取地址中携带的参数,即符号? 后面部分 |
hash |
属性,获取地址中的哈希值,即符号# 后面部分 |
reload() |
方法,用来刷新当前页面,传入参数true 时表示强制刷新 |
1 | <body> |
(三)案例
上述代码即为案例,展示了location
对象各属性和方法的使用。
(四)拓展
在前端路由中,location
对象的hash
属性常被用于实现单页面应用(SPA)的路由功能,通过监听hash
的变化来切换页面内容。
navigator 对象
(一)核心概念
navigator
对象记录了浏览器自身的相关信息,可用于检测浏览器版本及平台等。
(二)用法
通过userAgent
属性检测浏览器的版本及平台。
1 | // 检测 userAgent(浏览器信息) |
(三)案例
上述代码展示了通过navigator.userAgent
检测设备类型并进行页面跳转的案例。
(四)拓展
除了检测设备类型,navigator
对象还可用于检测浏览器支持的功能,如navigator.geolocation
用于获取用户地理位置信息(需用户授权)。
history 对象
(一)核心概念
history
对象主要管理历史记录,与浏览器地址栏的前进、后退等操作相对应。
(二)用法
常见方法:
方法 | 说明 |
---|---|
forward() |
前进到下一个历史记录,等同于history.go(1) |
back() |
后退到上一个历史记录,等同于history.go(-1) |
go(num) |
跳转到指定的历史记录,num 为正数表示前进,负数表示后退 |
1 | <body> |
(三)案例
上述代码展示了history
对象前进和后退方法的使用案例。
(四)拓展
在单页面应用中,history
对象可与前端路由结合,通过history.pushState()
和history.replaceState()
方法实现无刷新页面跳转,同时更新浏览器历史记录。
本地存储(今日重点)
(一)核心概念
本地存储用于将数据存储在本地浏览器中,实现数据持久化,即使页面刷新或关闭,数据也可保留。
(二)用法
localStorage
- 作用:数据长期保留在本地浏览器,刷新和关闭页面数据不丢失。
- 特性:以键值对形式存储,且存储的是字符串,可省略
window
。 - 操作方法
- 存储:
localStorage.setItem('key', 'value')
- 获取:
localStorage.getItem('key')
- 删除:
localStorage.removeItem('key')
- 存储:
sessionStorage
特性:用法与
localStorage
基本相同,但当页面浏览器关闭时,存储的数据会被清除。操作方法
- 存储:
sessionStorage.setItem('key', 'value')
- 获取:
sessionStorage.getItem('key')
- 删除:
sessionStorage.removeItem('key')
- 存储:
localStorage
存储复杂数据类型- 问题:本地只能存储字符串,无法直接存储复杂数据类型。
- 解决:使用
JSON.stringify(复杂数据类型)
将复杂数据类型转换为 JSON 字符串后存储,使用时通过JSON.parse(JSON字符串)
将取出的字符串转换为对象。
(三)案例
1 |
|
1 | <body> |
(四)拓展
本地存储在实现网页离线功能、记住用户设置等场景中有广泛应用。但需注意,由于数据存储在本地,要注意数据的安全性,避免存储敏感信息。
八、综合案例相关数组方法
(一)数组map
方法
- 核心概念:用于遍历数组处理数据,并返回一个新数组。
- 用法:
数组.map(function (ele, index) { /* 处理逻辑 */ return 处理后的值; })
,ele
为数组元素,index
为索引。
1 | const arr = ['red', 'blue', 'pink']; |
- 案例:上述代码展示了
map
方法遍历数组并添加固定字符串的案例。 - 拓展:
map
方法常与其他数组方法如filter
、reduce
等结合使用,实现复杂的数据处理逻辑。
(二)数组join
方法
- 核心概念:将数组中的所有元素转换为一个字符串。
- 用法:
数组.join(分隔符)
,分隔符为空时默认用逗号分隔,为空字符串时元素之间无分隔符。
1 | <body> |
- 案例:上述代码展示了
join
方法将数组转换为不同分隔符字符串的案例。 - 拓展:在将数组数据展示为特定格式的文本时,
join
方法非常有用,如将数组转换为 CSV 格式字符串。