Javascript Don';I don’我不明白为什么这个代码能工作

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

如果用户的浏览器是IE,并且localStorage不存在,那么下面的代码将设置localStorage,其过期日期为24小时

(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-将字符串从本地存储转换成数字。