JSON字符串、本地存储cookie,localstorage

1. JSON字符串

定义:用于描述对象或数组的字符串。

作用:用于前后端交互

1.1 注意事项

  1. { } 表示一个对象

  2. 表示数组

  3. 键与值之间用“:”分割。

  4. 属性之间用“,”分割。

  5. 属性名必须用双引号

  6. 值可以是字符串,数字,布尔值,null,对象,数组。不要用NaN.

  7. 最后一位不能是逗号。

1.2 JSON与(数组)之间的转换

方法:JSON.parse(JSON字符串)

返回的值:转换好的js对象(数组);

//JSON字符串转数组或者对象
let s = '{"name":"小黑","age":20,"hobby":"唱歌"}';
console.log("json字符串:" + s);
let o = JSON.parse(s);
console.log("转换得到的对象");
console.log(o);

结果:在这里插入图片描述

1.3 对象转JSON字符串

方法:JSON.stringIfy(数组/对象)

返回的值:JSON字符串

注意:转换时,对象的函数会被过滤掉

let p = {
    name: '小黑',
    age: 20,
    eat() {
        console.log('玩玩玩');
    }
};
console.log(p);
let s = JSON.stringify(p)
console.log("转换好的字符串:" + s); //与'{"name":"小黑","age":20}'一样

结果:
在这里插入图片描述

1.4 实现深拷贝

步骤:可以先将对象转为json字符串,再转回对象。再转回的对象和原来的对象不相等

// 先转换成JSON字符串
let s = JSON.stringify(p);
// 再将JSON字符串转换成对象
let p1 = JSON.parse(s);
console.log(p1);

console.log(p1.friend == p.friend); //false
p1.friend[1].name = "不知道";
console.log(p);
console.log(p1)

2. 本地存储

2.1 cookie()

缺点:cookie操作不方便,大小只有4kb。 需要服务器环境

说明:在存储的时候只能以字符串的形式进行存储

作用:是用来解决 如何记录浏览器中的用户信息问题的。

应用场景: 购物车 和 记住用户名密码

规则: 1. 键值对形式来存储数据的。

	    2. 多个键值对之间用分号;分割。

特点:1. 时效性:会话cookie和持久cookie。

​ 2. 会话cookie:浏览器退出,就被删除了。

​ 3. 持久cookie:只要不到失效时间,就算电脑重启了,cookie仍然存在。

注意:在使用cookie的时候页面必须在服务器环境下打开才可以使用cookie!!!

使用: js通过document.cookie来创建,读取,删除 cookie。

2.1.1 创建/添加cookie

方式: document.cookie = "k=v"; //k:key 表示键 v:value 表示

注意:多次添加,需要分别设置。

设置的有效期默认为会话级别,浏览器关闭就会失效。

设置有效期:document.cookie = "k=v;expires='+date对象";

【注意】 cookie的时间以格林威治时间为准。

document.cookie = 'name=zhangsan';
document.cookie = 'age=40';
console.log(document.cookie);//查看(读取)在控制台
2.1.2 修改

将cookie重新添加一遍。和添加的语法一样。 有则修改,无则新增。

2.1.3 删除

只需要将过期时间设置为已经过去的时间即可。expire参数

// 删除 expire(设置一个过期的时间就ok了)
document.cookie = 'name=zhangsan;expires=' + new Date('2020/01');

注意:键和值之间必须使用“=”来表示,否则不成功

document.cookie = 'age=40';

2.1.4 cookie()的封装
<script>
    function setCookie(k, v, exp) {
    if (exp) {
        var d = new Date();
        d.setTime(d.getTime() + exp * 60 * 60 * 1000);
    }
    // 三元表达式写法。
    let str = `${k}=${v}`
    d ? str += `;expires=${d.toGMTString()}` : 1;
    document.cookie = str;

    // 如果d有值,说明传入了有效期
    // if (d) {
    //   document.cookie = `${k}=${v};expires=${d.toGMTString()}`;
    // } else {
    //   //如果d没值,cookie默认为会话级别。
    //   document.cookie = `${k}=${v};`;
    // }
}

// setCookie("name","zhangsan",1);
// setCookie("age",20,1);

// console.log(document.cookie);

function getCookie(k) {
    // 先按照;分割 多个键值对
    let arr = document.cookie.split(";");
    for (let i = 0; i < arr.length; i++) {
        // 一个键值对使用=分割
        let tmp = arr[i].split("=");
        if (tmp[0].trim() == k) {
            return tmp[1];
        }
    }
}
let age = getCookie("age");
console.log(age);
</script>

2.2 localstorage

2.2.1 cookie()与 localstorage的区别
  1. cookie操作不方便,大小只有4kb。 需要服务器环境 ;在存储的时候只能以字符串的形式进行存储

  2. localstorage 方法操作简单,大小有5M 不需要服务器环境

2.2.2 基本使用

使用window.localstorage来操作localstorage。

注意:有兼容性问题,IE低版本不要使用。

2.2.3 添加键值对
localStorage.setItem('name', '小黑');
localStorage.setItem('age', 20);
2.2.4 删除键值对
localStorage.removeItem('age');
2.2.5 获取键值对中的值
var val = localStorage.getItem('name');
console.log(val); //结果:小黑
2.2.6 清空
localStorage.clear();
console.log(localStorage);

2.3 sessionStorage

与localstorage的区别:
  1. localstorage有效期是永久。

  2. sessionStorage有效期是会话级别。

2.3.1 添加键值对
// 是会话级别的
let seii = window.sessionStorage;
console.log(seii);
seii.setItem('name', '小红');
seii.setItem('hobby', '睡懒觉');
console.log(seii);
2.3.2 删除键值对
seii.removeItem('name');
console.log(seii);
2.3.3 获取值
var ss = seii.getItem('hobby');
console.log(ss);
2.3.4 清空
seii.clear();
console.log(seii);

小案例:记住密码和用户名

html部分

用户名:<input type="text" id="username">
<br>&nbsp;&nbsp;&nbsp;码:
<input type="password" id="pwd">
<br>
<span style="font-size: 14px;">记住用户名密码:</span>
<input type="checkbox" id="remember">
<!-- 

js部分

const username = document.getElementById('username');
const pwd = document.getElementById('pwd');
const remember = document.getElementById('remember');
remember.onclick = function() {
    if (remember.checked && username.value.length > 0 && pwd.value.length > 0) {
        localStorage.setItem('username', username.value);
        localStorage.setItem('pwd', pwd.value);
    } else {
        localStorage.removeItem('username');
        localStorage.removeItem('pwd');
    }

}
// 设置默认值
if (localStorage.getItem('username')) {
    username.value = localStorage.getItem('username');
    pwd.value = localStorage.getItem('pwd');
    // 复选框为默认选中状态
    remember.checked = true;
}

小案例:删除

功能:

	    1.获取用户输入的用户名和年龄
		 
		2.创建tr节点,tr节点创建4个td节点

	    3.第一个td节点显示编号,第二个td节点中插入文本节点,用户名 以此类推。第四个插入 一个删除按钮

		4.4个td节点插入到tr中,tr插入到tbody中。

		5.删除按钮可以实现删除功能。

html部分

<style>
    div {
        text-align: center;
    }
    table {
        width: 640px;
        border: 1px solid gray;
        border-collapse: collapse;
        margin: 50px auto;
    }
    thead tr {
        background: #ccc;
    }
    th,
    td {
        width: 160px;
        line-height: 35px;
        border: 1px solid gray;
        text-align: center;
    }
</style>
</head>
<body>
    <div>
        <label for="">用户名:</label>
        <input type="text" id="txt1">
        <label for="">年龄:</label>
        <input type="text" id="txt2">
        <button id="btn">添加</button>
        <table>
            <thead>
                <tr>
                    <th>编号</th>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody id="box">
            </tbody>
        </table>
    </div>
</body>

js部分

<script>
    // var data = [{
    //   id: 1,
    //   username: "小王",
    //   age: 34
    // }, {
    //   id: 2,
    //   username: "小红",
    //   age: 40
    // }];
    // 写一个空数组
    let pop = []
//编号
var btn = document.getElementById("btn");
//单击事件
btn.onclick = function() {
    //获取用户名
    var index = pop.length + 1;
    var txt1 = document.getElementById("txt1")
    var username = txt1.value;
    //获取年龄
    var txt2 = document.getElementById("txt2")
    var age = txt2.value;
    //把添加按钮添加的所有信息都拿到放到一个新对象中
    var ppp = {
        index: index,
        username: txt1.value,
        age: txt2.value,
    }
    //每次一单击都是一个新对象然后把新对象添加给pop中
    pop.push(ppp);
    //把当前数据存储到 localstorage中
    localStorage.setItem("info1", JSON.stringify(pop));

    initTr(index, username, age)
}
var tbody = document.getElementById("box")
//生成一个单元行。
function initTr(id, username, age) {
    //创建tr节点,创建4个td节点
    var tr = document.createElement("tr");
    var str = `
<td>${id}</td>
<td>${username}</td>
<td>${age}</td>
<td>
<button class="del">删除</button>
</td>`
    tr.innerHTML = str;
    //获取删除按钮
    var delBtn = tr.querySelector(".del");
    //给按钮绑定点击事件
    delBtn.onclick = function() {
        //找到当前行  tr 删除
        delBtn.parentNode.parentNode.remove();
    }
    //tr插入到tbody中。
    tbody.appendChild(tr);
}
//判断
if (localStorage.getItem("info1")) {
    // let strr= localStorage.getItem("info1");
    //把储存的数据json转换一下 复制给pop 调用单元行函数 添加新单元
    pop = JSON.parse(localStorage.getItem("info1"))
    for (let k = 0; k < pop.length; k++) {
        initTr(pop[k].index, pop[k].username, pop[k].age)
    }
}
   </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值