最近看到一个帖子:外包对楼主怀恨在心,处处使绊子,还问有什么办法能让对方彻底疯狂。看得我一愣,这年头,工作不仅要技术过硬,还得有点“职场哲学”啊。
说实话,我觉得这种情况首先还是要冷静处理。外包的人也不容易,大部分时候他们的“使绊子”可能是出于误解或者工作压力。
要么试着多沟通,要么用专业技能把问题解决掉。再不济,找到领导反馈,让问题停留在工作层面,不要升级到“职场战争”。
不过说到底,我觉得大家都在同一条船上,最好还是能和平共处。毕竟一个项目跑到一半,内部矛盾搞得鸡飞狗跳,不仅影响工作效率,还让自己的日子更难过。
今日面试题
好了,吃完瓜,我们言归正传,今天跟大家聊聊 JavaScript 本地存储的方式以及它们的区别和应用场景。这个问题可是前端面试中常见的考点,理解透了不仅能应对面试,还能在实际开发中用得得心应手。
在 JavaScript 中,本地存储的方式主要有以下几种:cookie
、sessionStorage
、localStorage
和 indexedDB
。我们从基础到高级,挨个来聊聊这些存储方式的特点、用法、优缺点和适合的场景。
cookie
cookie
是最古老的本地存储方式,它的原始设计是为了解决 HTTP 的无状态问题,用来存储会话信息。它的存储本质是一个小型文本文件,由 name=value
的键值对组成,并可以通过 HTTP 请求头自动传递到服务器。
// 设置 cookie
document.cookie = "username=John; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";
// 获取所有 cookie
console.log(document.cookie);
// 删除 cookie (通过设置过期时间)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
cookie的特点:
存储大小限制:每个域名下的 cookie 大小不能超过 4KB。 生命周期:可以通过 expires
或max-age
属性设置过期时间,否则为会话级别(浏览器关闭即失效)。安全性:标记 Secure
属性可以保证 cookie 仅通过 HTTPS 发送,标记HttpOnly
属性可防止 JavaScript 访问。服务器交互:每次 HTTP 请求都会携带 cookie,增加了请求体积。
通常用于存储需要在客户端和服务器之间交互的少量信息,比如会话标识、用户偏好等。
localStorage
localStorage
是 HTML5 引入的一种本地存储方式,支持更大的存储容量,主要用于长期存储数据。
// 设置数据
localStorage.setItem("username", "John");
// 获取数据
const username = localStorage.getItem("username");
console.log(username); // John
// 删除数据
localStorage.removeItem("username");
// 清空所有数据
localStorage.clear();
localStorage的特点:
存储大小限制:大约 5MB(视浏览器而定)。 生命周期:除非手动删除,否则数据会永久存储。 同源策略:同一域名下的页面可以共享数据。 数据格式:只能存储字符串,如果需要存储对象,需要先使用 JSON.stringify
。
// 存储对象
localStorage.setItem("user", JSON.stringify({ name: "John", age: 30 }));
// 获取对象
const user = JSON.parse(localStorage.getItem("user"));
console.log(user.name); // John
localStorage的缺点:
数据持久性可能会带来隐私风险。 不支持设置过期时间。
适合存储长期数据,比如用户设置、身份令牌等。
sessionStorage
sessionStorage
和 localStorage
类似,但生命周期更短。
// 设置数据
sessionStorage.setItem("username", "John");
// 获取数据
const username = sessionStorage.getItem("username");
console.log(username); // John
// 删除数据
sessionStorage.removeItem("username");
// 清空所有数据
sessionStorage.clear();
sessionStorage的特点:
存储大小限制:约 5MB。 生命周期:仅在页面会话期间有效,浏览器标签页关闭后数据被清除。 同源策略:仅限同一页面的脚本访问。
用于存储临时数据,比如用户在单个页面会话中的操作状态。
indexedDB
indexedDB
是一种浏览器内置的低级数据库,用于存储大量结构化数据。
// 打开数据库
const request = indexedDB.open("myDatabase", 1);
// 创建对象存储
request.onupgradeneeded = function (event) {
const db = event.target.result;
db.createObjectStore("users", { keyPath: "id" });
};
// 存储数据
request.onsuccess = function (event) {
const db = event.target.result;
const transaction = db.transaction("users", "readwrite");
const store = transaction.objectStore("users");
store.add({ id: 1, name: "John" });
};
indexedDB的特点
存储容量:理论上无限制(受设备存储限制)。 支持数据类型:原生支持 JS 对象、二进制文件等。 异步操作:不会阻塞主线程,性能优于 localStorage
。操作复杂:API 相对繁琐,需要事件回调。
适合存储大量数据,比如离线应用、富文本编辑器中的文档历史等。
好了,我们来总结一下透明的区别:
特性 | cookie | localStorage | sessionStorage | indexedDB |
---|---|---|---|---|
存储容量 | ≤ 4KB | ≈ 5MB | ≈ 5MB | 无限 |
生命周期 | 可设置过期时间 | 永久 | 页面会话 | 永久 |
与服务器交互 | 每次请求携带 | 不与服务器通信 | 不与服务器通信 | 不与服务器通信 |
数据类型 | 字符串 | 字符串 | 字符串 | 任意类型 |
最后,面试官问你:JavaScript 本地存储的方式有哪些?它们的区别和应用场景?
你可以参考一下回答:
JavaScript 本地存储的方式主要有 cookie
、localStorage
、sessionStorage
和 indexedDB
。它们的区别如下:
cookie
用于客户端和服务器通信,每次 HTTP 请求都会携带数据,适合存储少量会话信息,但存储容量有限(≤ 4KB)。localStorage
是持久化存储,数据永久有效,适合存储长期数据(≈ 5MB)。sessionStorage
是会话级存储,浏览器标签页关闭后数据清除,适合存储临时数据(≈ 5MB)。indexedDB
是浏览器内置数据库,适合存储大量复杂结构数据,支持高性能查询。
选择存储方式时,应根据数据大小、生命周期和是否需要与服务器交互来决定。例如:
cookie
:标记用户身份,存储少量信息。localStorage
:保存令牌、用户设置等长期数据。sessionStorage
:保存临时会话数据。indexedDB
:存储大数据量,如离线缓存或文档历史。
目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥私藏精品 热门推荐 虎哥作为一名老码农,整理了全网最全《前端资料合集》。