项目中遇见 cookie 值存不上,what fuck?什么情况,不知道。用$.cookie 和原生的 cookie 都不行,存上值,就被删了一样。找不见地方。考虑到项目比较大,去找得代价,还不如换种实现方式,于是就想起来用 localStorage 了。然后 localStorage 又不像 $.cookie 那样有过期时间。因此需要自己去封装一下,故而,有了这个一个博客。勿喷!

调用方式

setItem()与 $.cookie() 类似,expires 支持传入一个时间对象(object),有效时间的数值(number, 单位:毫秒 或者 天);

当 expires 值类型为 number ,且值小于等于当年的总天数时,表示的为天,否则表示毫秒;

光说,不行,看看下面:

调用方式:

var myLocalStorage = require('');
myLocalStorage.setItem("test1", "Mobro1", {expires: 1});
myLocalStorage.setItem(
"test2",
"Mobro2",
{expires: new Date(new Date().getTime() + 1000 * 60 * 60 * 24)}
);
myLocalStorage.setItem("test3", "Mobro3", {expires: 1000 * 60 * 10});

test1: 有效期为 1 天。

test2: 有效期为 1 天。

test3: 有效期为 10 分钟。

getItem() 与 $.cookie() 也是类似的,取那个 localStorage 值,只需要传入一个 key 键名就好了。若没有找到 当前 key 对应的 localStorage 值,则返回 null 对象。

removeItem() 删除一个 localStorage 值,删除成功,返回true,否则返回 false

继续往下看:

myLocalStorage.getItem("test1")  // Mobro1
myLocalStorage.removeItem("test1"); // 如果成功
myLocalStorage.getItem("test1") // null

代码纯属手敲,逻辑上一定会有什么漏洞的,还望各位大牛不吝赐教。


只与同好争高下,不与傻瓜论短长。 -- 《欢乐颂》电视剧台词。

最近看了一部日本的电影,《希望在别处》,感觉还是不错的,给推荐一下。

四川老家大雨,火车拿去压桥了;

读大学的地方兰州大雨,车子被冲跑了;

工作地北京大雨,天天上班穿拖鞋,每天丢一把伞;

哈哈哈哈

>oo<


完整源码

var myLocalStorage = {
setItem: function(key, value, exp) {
var obj = new Object(),
expires = exp.expires || null;
obj.value = value;
obj.time = new Date().getTime(); // expires 类型
if (expires === null) {
delete obj.expires;
} else if (typeof expires === "object") {
obj.expires = expires.getTime() - obj.time;
} else if (typeof expires === "number") {
if ((expires | 0) !== expires) {
throw new Error("expires must be integer number!");
} // expires 小于 365、366 则,按天算。否则按时间戳算
if (expires <= getYearDays() && expires > 0) {
obj.expires = expires * 1000 * 60 * 60 * 24;
} else if (expires > getYearDays()) {
obj.expires = expires;
} else if (expires <= 0) {
this.removeItem(key);
}
}
localStorage.setItem(key, JSON.stringify(obj));
},
getItem: function(key) {
var obj = JSON.parse(localStorage.getItem(key));
if (obj === "null" || obj === null) return null;
var expires = obj.expires,
now = new Date().getTime(),
time = obj.time; if (now - time >= expires ||
now < time) {
localStorage.removeItem(key);
return null;
} else {
return obj.value;
}
}, // 删除成功返回 true, 否则返回 false
removeItem: function(key) {
if (this.getItem(key) !== null) {
localStorage.removeItem(key); return this.getItem(key) === null ? true : false;
}
return true;
},
keys: function(key) { }
}
function getYearDays () {
return new Date().getFullYear() % 4 === 0 ? 366 : 365;
} module.exports = myLocalStorage;

自己封装myLocalStorage,使其有有效期的更多相关文章

  1. Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)

    package com.ad.ssp.engine.common; import java.io.IOException; import java.util.ArrayList; import jav ...

  2. 编译kubeadm使生成证书有效期为100年

    目录 问题 编译 检查结果 问题 当我使用kubeadm部署成功k8s集群时在想默认生成的证书有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 ...

  3. 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装

    前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...

  4. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  5. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  6. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  7. JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

    JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes     ...

  8. SOP、DIP、PLCC、TQFP、PQFP、TSOP、BGA封装解释

    1. SOP封装SOP是英文Small Outline Package的缩写,即小外形封装.SOP封装技术由1968-1969年菲利浦公司开发成功,以后逐渐派生出SOJ(J型引脚小外形封装).TSOP ...

  9. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

随机推荐

  1. js 时分秒与秒数的转换

    1. 时间戳 格式化为 时分秒(00:00:00) /** * 时间秒数格式化 * @param s 时间戳(单位:秒) * @returns {*} 格式化后的时分秒 */ var sec_to_t ...

  2. Jupyter notebook安装

    之前就装了jupyter notebook,但今天打开来发现是python2,并且似乎没法转换到python3??? so,再把python3的版本安装一下 打开CMD pip install jup ...

  3. layer loading层 的设置

    /* shadeClose 类型:Boolean 默认:true,是否点击遮罩时关闭层 */ var tishi = layer.open({ shadeClose: false ,type: 2 , ...

  4. Python中time模块详解(转)

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...

  5. mdf ldf添加到数据库

    1.拷贝mdf ldf文件到某个文件夹下 2.打开SQL执行语句: USE master; GO CREATE DATABASE NewFile ON (FILENAME = 'C:\Program ...

  6. Spark入门到精通--(第二节)Scala编程详解基础语法

    Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...

  7. SpringBoot-性能优化之扫包优化

    性能优化 组件自动扫描带来的问题 默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用.使用这个注解后,会触发自动配置( ...

  8. sql server创建windows账户

    --不要干坏事 sql server中使用xp_cmdshell --1.允许配置高级选项 GO RECONFIGURE GO --2.开启xp_cmdshell服务 RECONFIGURE GO - ...

  9. Mac 报错:-bash: telnet: command not found

    解决方法 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/i ...

  10. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...