有一些不太理解的地方,麻烦解答下,谢谢
;(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
三元运算,可以看一下MDN的描述。给出的代码里可以看到参数 time 是第三个参数,在js里参数是可是省略的,由此可以分析得出:(1)当time的参数获取了值的时候,将执行语句time = Date.now() + time;(2)当time没有明确赋值时,执行time = 0;这句的意思后面再说。可以将整条语句换成
if (!time) {
time = Date.now() + time;
} else {
time = 0;
}
将js对象转换成js字符串,具体意义你看这。
Date.now()返回一个值,和当前时间有关,现在获取的值一定比之前的大。这句的意思是如果当前时间值与之前时间值的差值超过了定下的time的值,就移除localStorage中的对应的值,即数据过期了。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 315 人
- 提交作业 136 份
- 解答问题 626 个
如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星