有一些不太理解的地方,麻烦解答下,谢谢

有一些不太理解的地方,麻烦解答下,谢谢

;(function(){
	var ls = window.localStorage;
	function oops(){
		return console.warn("your browser is not supported localStorage API");
	}
	function getItem(key){
		var data = ls.getItem(key);
		//将JSON字符串转换为对象
		data = JSON.parse(data) || {};
		if(data.time === 0){
			return data.value;
		}else if(Date.now() > data.time){
			ls.removeItem(key);
			return " ";
		}else{
			return typeof data.value !== "undefined" ? data.value : " ";
		}
	}
	function setItem(key,value,time){
		if(typeof key === "undefined"){
			return;
		}
		var data = {
			//Date.now()返回的是1970年1月1日午夜与当前日期和时间之间的毫秒数
			time: time ? Date.now() + time : 0,
			value: value
		}
		//将data转换为JSON字符串
		data = JSON.stringify(data);
		try {
		ls.setItem(key,data);
	}catch(e){
		ls.clear();
		ls.setItem(key,data);
	}
}
	function removeItem(key){
		ls.removeItem(key);
	}
	function clear(){
		ls.clear();
	}
	//声明对象
		window.cacheStorage = {
			getItem: ls ? getItem : oops,
			setItem: ls ? setItem : oops,
			removeItem: ls ? removeItem : oops,
			clear: ls ? clear : clear
		}
})()

1,上述代码中,setItem函数中  time: time ? Date.now() + time : 0,  为什么要这样写呢?

2,为什么要将data转换为JSON字符串,后面又将JSON字符串转换为对象呢?

3,

function getItem(key){

var data = ls.getItem(key);

//将JSON字符串转换为对象

data = JSON.parse(data) || {};

if(data.time === 0){

return data.value;

}else if(Date.now() > data.time){

ls.removeItem(key);

return " ";

}else{

return typeof data.value !== "undefined" ? data.value : " ";

}

}

这个函数中  if(Date.now() > data.time)   为什么要这样判断呢?

麻烦了谢谢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
六月的飞羽 2018-06-19 21:53:24
  1. 三元运算,可以看一下MDN的描述。给出的代码里可以看到参数 time 是第三个参数,在js里参数是可是省略的,由此可以分析得出:(1)当time的参数获取了值的时候,将执行语句time = Date.now() + time;(2)当time没有明确赋值时,执行time = 0;这句的意思后面再说。可以将整条语句换成

    if (!time) {

        time = Date.now() + time;

    } else {

        time = 0;

    }

  2. 将js对象转换成js字符串,具体意义你看这

  3. Date.now()返回一个值,和当前时间有关,现在获取的值一定比之前的大。这句的意思是如果当前时间值与之前时间值的差值超过了定下的time的值,就移除localStorage中的对应的值,即数据过期了。


  • 奥,不好意思,第一点的代码写错了,应该是 if (!!time) { time = Date.now() + time; } else { time = 0; }
    2018-06-19 21:57:05
  • 提问者 慕标0373250 回复 六月的飞羽 #2
    你好,我是想问这里为什么要让time = Date.now()呢?
    2018-06-20 12:28:53
  • 六月的飞羽 回复 提问者 慕标0373250 #3
    这只是简单的设置了时间标志而已。你也可以直接设置一个其他的时间值t,当t的值大于time的值时移除数据该。但这样比较麻烦,因为time是时间值,t也须是时间值才能比较。 用now()是因为得到的值只会越来越大,只要两个now()的差值大于time即可,这样做相当直观方便,没有其他的意义
    2018-06-20 12:41:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5&CSS3进阶与常用框架 2018
  • 参与学习       315    人
  • 提交作业       136    份
  • 解答问题       626    个

如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师