第六课最后留了个悬念:夜间模式一刷新就忘。这节课就来解决它——给网页装上"记忆"。
先看对比,你就明白问题出在哪:
| 变量 | localStorage | |
|---|---|---|
| 🎭 比喻 | 便签纸,贴在内存里 | 笔记本,写在硬盘上 |
| ⏳ 寿命 | 刷新页面 = 一阵风吹来,全没了 | 刷新、关浏览器、甚至重启电脑都还在 |
| 📦 能存什么 | 数字、字符串、数组……什么都行 | 只有字符串(后面细说这个大坑) |
localStorage 就是塞给它的一个笔记本:它会把重要的事写下来,下次见面翻本子就"想起来了"。
浏览器给每个网站发一个专属抽屉,谁也看不见谁的。抽屉里的存取规则:
钥匙名(key)是你自己起的名字,内容(value)是你要存的东西。就像图书馆:报书名(key),管理员把书(value)找给你。
file:// 打开本地文件时,Chrome/Edge 会把本地文件当成"一家人"共用抽屉——所以钥匙名别撞车(本课件演示用的钥匙都带 demo- 前缀,就是为了不和你的主页撞)。
| 操作 | 代码 | 比喻 |
|---|---|---|
| 📥 存 | setItem(钥匙, 内容) |
把字条放进抽屉(同名钥匙会覆盖旧字条) |
| 📤 取 | getItem(钥匙) |
报钥匙名拿字条;没有这把钥匙 → 返回 null(就是"查无此条") |
| 🗑️ 删 | removeItem(钥匙) |
把某一张字条撕掉 |
| 💣 清空 | clear() |
整个抽屉倒掉,一张不剩(慎用!) |
下面是一个真正的抽屉(就是本页面自己的 localStorage)。随便存、取、删,然后按 F5 刷新页面——看看你存的字条还在不在:
🔑 钥匙名: 📝 内容:
取出结果:
抽屉里现在有的字条:
下面这个数字会记住你——按 F5 刷新试试,它每次都 +1,刷新不掉:
你已经刷新本课件
次(去 F12 → Application → Local Storage 里看它存的字条)
原理就三行:读旧数 → +1 → 存回去。刷新前它把数字"写进笔记本",刷新后"翻开笔记本接着数"。
存一个数字进去试试:
存进去的是数字 42,取出来变成了字符串 "42"。抽屉只会写字,数字一进抽屉就"被穿上引号"。
Number() 转换。
上面的计数器演示就是这么写的——这就是为什么它能 +1 而不是 +"1"。
打开 my-homepage.html,找到最底部的 <script>。原来的代码是:
在 toggleDark 函数的最后一行后面加:
在 <script> 的最开头(function 前面)加:
(为什么这段要放最开头?因为要先穿衣服再出门——先戴上 dark 牌子,页面才以夜间模式亮相。)
保存 → 切到夜间模式 → 按 F5 刷新。这次它记住了! 🎉
再切回白天刷新,也是白天——抽屉里存的字条在 F12 的 Local Storage 里看得见。
my-homepage.html,验证夜间模式刷新不丢。<span id="visit">?</span>,再在 script 里加这三行(钥匙名换成 visit):let n = Number(localStorage.getItem('visit')) || 0;
n = n + 1;
localStorage.setItem('visit', n);
document.getElementById('visit').textContent = n;function resetTheme() {
localStorage.removeItem('theme');
location.reload();
}location.reload() 是"刷新页面"的新咒语,记住它)
老规矩:改代码 → 保存 → 刷新。挑战 ② 里如果计数器显示的是 NaN,回想第 5 节——你忘了撕掉字条(Number())。
| 知识点 | 一句话 |
|---|---|
| 为什么网页会失忆 | 变量活在内存(便签纸),刷新即死;localStorage 写在硬盘(笔记本) |
| 三兄弟 ⭐ | setItem 存 / getItem 取 / removeItem 删,没有就返回 null |
| 大坑 ⭐ | 只能存字符串,数字取出来要 Number() 还原 |
| 实战套路 | 改状态时 setItem 存 → 页面打开时 getItem 读 |
| 📱 | 第八课:响应式设计 | 让主页在手机上打开也不乱——@media 媒体查询 |
先做挑战,做完喊我检查!🚀