1. 本地存储介绍

项目内容
问题以前我们页面写的数据一刷新页面就没有了
特点1. 数据存储在用户浏览器中
2. 设置、读取方便,页面刷新不丢失数据
3. 容量较大,约5M左右

2. 本地存储分类

存储类型特性
localStorage- 永久存储,除非手动删除
- 多窗口(页面)共享(同一浏览器)
- 以键值对形式存储
sessionStorage- 生命周期为关闭浏览器窗口
- 同一窗口(页面)下数据共享
- 以键值对形式存储
- 用法与localStorage基本相同

注意:sessionStorage 的使用方法与 localStorage 完全相同,只需将 localStorage 替换为 sessionStorage 即可。


3. 本地存储使用方法

方法语法描述
存储数据localStorage.setItem('键', '值')将数据存储到本地存储中
获取数据localStorage.getItem('键')从本地存储中获取数据
删除数据localStorage.removeItem('键')从本地存储中删除指定数据
清空数据localStorage.clear()清空本地存储中的所有数据

4. 存储复杂数据类型

操作语法描述
存储对象localStorage.setItem('键', JSON.stringify(对象))将对象转换为 JSON 字符串后存储
获取对象const obj = JSON.parse(localStorage.getItem('键'))将 JSON 字符串转换为对象后使用

示例代码

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>本地存储示例</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        .section { margin: 20px 0; padding: 15px; border: 1px solid #ddd; }
        button { margin: 5px; padding: 5px 10px; }
        .result { margin-top: 10px; padding: 10px; background: #f0f8ff; }
        input { margin: 5px; padding: 5px; }
    </style>
</head>
<body>
    <h1>本地存储示例</h1>
    
    <!-- 单一键值对存储 -->
    <div class="section">
        <h2>1. 单一键值对存储</h2>
        <input type="text" id="key" placeholder="键">
        <input type="text" id="value" placeholder="值">
        <button onclick="saveKeyValue()">存储</button>
        <button onclick="getKeyValue()">获取</button>
        <button onclick="removeKeyValue()">删除</button>
        <div class="result" id="keyValueResult"></div>
    </div>
    
    <!-- JSON 存储 -->
    <div class="section">
        <h2>2. JSON 存储</h2>
        <input type="text" id="productName" placeholder="商品名称">
        <input type="number" id="productPrice" placeholder="价格">
        <button onclick="saveObject()">存储商品</button>
        <button onclick="getObject()">获取商品</button>
        <div class="result" id="objectResult"></div>
    </div>
    
    <!-- 清空存储 -->
    <div class="section">
        <h2>3. 清空存储</h2>
        <button onclick="clearStorage()">清空本地存储</button>
        <div class="result" id="clearResult"></div>
    </div>
    
    <script>
        // 单一键值对存储
        function saveKeyValue() {
            const key = document.getElementById('key').value;
            const value = document.getElementById('value').value;
            if (key && value) {
                localStorage.setItem(key, value);
                document.getElementById('keyValueResult').textContent = `已存储: ${key} = ${value}`;
            } else {
                document.getElementById('keyValueResult').textContent = '请输入键和值';
            }
        }
        
        function getKeyValue() {
            const key = document.getElementById('key').value;
            if (key) {
                const value = localStorage.getItem(key);
                if (value) {
                    document.getElementById('keyValueResult').textContent = `获取到: ${key} = ${value}`;
                } else {
                    document.getElementById('keyValueResult').textContent = `未找到键: ${key}`;
                }
            } else {
                document.getElementById('keyValueResult').textContent = '请输入键';
            }
        }
        
        function removeKeyValue() {
            const key = document.getElementById('key').value;
            if (key) {
                localStorage.removeItem(key);
                document.getElementById('keyValueResult').textContent = `已删除键: ${key}`;
            } else {
                document.getElementById('keyValueResult').textContent = '请输入键';
            }
        }
        
        // JSON 存储
        function saveObject() {
            const name = document.getElementById('productName').value;
            const price = document.getElementById('productPrice').value;
            if (name && price) {
                const product = { name, price: parseFloat(price) };
                localStorage.setItem('product', JSON.stringify(product));
                document.getElementById('objectResult').textContent = `已存储商品: ${name}, 价格: ${price}`;
            } else {
                document.getElementById('objectResult').textContent = '请输入商品名称和价格';
            }
        }
        
        function getObject() {
            const productStr = localStorage.getItem('product');
            if (productStr) {
                const product = JSON.parse(productStr);
                document.getElementById('objectResult').textContent = `获取到商品: ${product.name}, 价格: ${product.price}`;
            } else {
                document.getElementById('objectResult').textContent = '未找到商品数据';
            }
        }
        
        // 清空存储
        function clearStorage() {
            localStorage.clear();
            document.getElementById('clearResult').textContent = '已清空本地存储';
            document.getElementById('keyValueResult').textContent = '';
            document.getElementById('objectResult').textContent = '';
        }
    </script>
</body>
</html>