javascript - 不明白为什么这段代码有效

标签 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 && !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是未定义的,那么如何计算呢?

最佳答案

Here the lastclear is undefined, how does the calculation works then?

不,它是nullgetItem为不存在的条目返回 null。在数字上下文中,null 强制转换为 0,因此 number - nullnumber - 0编号

(而如果原作者以另一种方式访问​​它,localStorage.myLocalStorage,该值确实是undefined,并且> 将不起作用,因为 number - undefinedNaN,并且所有与 NaN 的比较都会导致 false。 )

如果我正在编写代码,我不会依赖其中的 null 强制转换部分,尤其是因为它会绊倒代码的 future 读者(就像它绊倒你一样)。但这就是它起作用的原因。

关于javascript - 不明白为什么这段代码有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974090/

相关文章:

javascript - AngularJS 指令添加其他不起作用的指令

javascript - Phonegap应用程序使用localstorage函数错误

ios - 我应该在 iOS 应用程序中将图像保存到本地存储吗?

javascript - 所有循环值的总和 | Vuejs | Javascript |元素表

javascript - 使用嵌套的 JSON 对象填充选择标签

javascript - 在 Shadow DOM 中创建单选按钮

javascript - 每秒25次保存到浏览器localstorage可以吗?

javascript - 如何从 Backbone.LocalStorage 获取 Backbone.Collection

javascript - 浏览器本地存储无法正常工作

javascript - 为什么有时 scrollTop/scrollLeft 不可写?