Javascript Don';I don’我不明白为什么这个代码能工作
如果用户的浏览器是IE,并且localStorage不存在,那么下面的代码将设置localStorage,其过期日期为24小时Javascript Don';I don’我不明白为什么这个代码能工作,javascript,local-storage,Javascript,Local Storage,如果用户的浏览器是IE,并且localStorage不存在,那么下面的代码将设置localStorage,其过期日期为24小时 (function ieAlert() { var lastclear = window.localStorage.getItem('myLocalStorage'), time_now = (new Date()).getTime(); var isIE = document.documentMode if (isIE && !l
(function ieAlert() {
var lastclear = window.localStorage.getItem('myLocalStorage'),
time_now = (new Date()).getTime();
var isIE = document.documentMode
if (isIE && !lastclear) {
if ((time_now - lastclear) > 1000 * 60 * 60 * 24) {
window.localStorage.clear()
window.localStorage.setItem('myLocalStorage', time_now)
}
}
})()
它起作用了。
但我不明白的是这一部分:
if (isIE && !lastclear) {
if ((time_now - lastclear) > 1000 * 60 * 60 * 24) {
window.localStorage.clear()
window.localStorage.setItem('myLocalStorage', time_now)
}
}
这里的lastclear
是未定义的,那么计算是如何工作的呢
这里的lastclear
是未定义的,那么计算是如何工作的呢
不,它是空的。对于不存在的条目,返回null
。在数字上下文中,null
强制为0
,因此number-null
是number-0
是number
(如果原始作者以另一种方式访问它,localStorage.myLocalStorage
,则该值确实是未定义的
,而
不起作用,因为number-undefined
是NaN
,所有与NaN
的比较都会导致false
)
如果我在写代码,我不会依赖它的
null
强制部分,尤其是因为它会绊倒未来的代码读者(就像它绊倒你一样)。但这就是为什么它会起作用。更大的问题是,你为什么要这么做?逻辑不能使人信服sense@charlietfl-我想我们没有看到更多的逻辑…。@t.J.Crowder是的。。。如果变量为“未定义”,则比较其值:)完全符合逻辑。ieAlert
,lastclear
,time\u now
仅PascalCasing为“缺失”;但一点也没有错过。请选择一种风格(第一种),无论是哪一种(第一种!!!)都要坚持下去,但不要这样混搭。哈哈哈,真的。感谢您指出此项。编号-未定义=NaN@FlashThunder-是的。我不知道原始作者是否知道并使用了getItem
,特别是因为null
返回,或者使用了它然后看到null
返回,或者是什么。这绝对不是我编写代码的方式。:-)@user1941537-为了能够提供有用的输入,我们必须知道代码要做什么,因为它似乎很可能没有做它应该做的事情。例如,上面的代码可以是if(document.documentMode&&!localStorage.getItem(“myLocalStorage”){localStorage.clear();localStorage.setItem(“myLocalStorage”,Date.now());}
,因为它基本上就是这样做的,所以整个第二个if
是毫无意义的。(但是,关于改进逻辑的真正反馈将是一个完全不同的问题。)@user1941537-“但是,比较本地存储的到期日期有什么更好的方法呢?”嗯,同样,这将是一个不同的问题。问题中的代码没有这样做。但例如:if(document.documentMode){var last=+localStorage.getItem(“last_time”)| | 0;var now=Date.now();if(!last| |(now-last)>threshold){localStorage.setItem(“last_time”,now)/*…做点什么…*/}
@user1941537-将字符串从本地存储转换成数字。