【问题标题】:Javascript comparing 2 checks for localStorageJavascript 比较 localStorage 的 2 个检查
【发布时间】:2014-10-28 22:19:35
【问题描述】:

我在diveintohtml5 网站上看到了这个。这是他们检查浏览器是否支持本地存储的方式。

return 'localStorage' in window && window['localStorage'] !== null;

这和刚才做的一样吗?

return window.localStorage != undefined

【问题讨论】:

  • 我个人会做return !!window.localStorage,这会将0,false,undefined,"",NaN的值转换为false以进行更好的检查
  • @Robert 我认为return typeof window.localStorage == 'object'; 是最好的方法。如果 localStorage 属性不是对象,那么这意味着它没有在浏览器中实现
  • +1,越严格越好。

标签: javascript html comparison local-storage


【解决方案1】:

1

return 'localStorage' in window && window['localStorage'] !== null;

如果window 对象包含名称为localStorage 的属性并且该属性的值不是null,则返回true。


2

return window.localStorage != undefined

如果window 对象包含名称为localStorage 的属性并且该属性的值不是undefinednull,则返回true (我假设全局属性undefined 持有值undefined

【讨论】:

  • 您的分析指出第二个测试更好,因为如果有人设置window.localStorage = undefined,第一个测试会返回true
  • @Šime 一个问题:typeof null === 'object' 因此,如果 window.localStorage 为 null,您将报告为 true。
  • @Hemlock 是的,当然。它必须是这样的:return typeof window.localStorage == 'object' && window.localStorage != null; 这将检查 localStorage 属性是否是一个对象。
  • 正如 Hemlock 所说,return typeof window.localStorage != 'undefined'; 工作不正确。当浏览器支持localStorage,但被用户禁用时,window.localStorage 的值为null;并且给定的检查返回 true(这是不正确的)。
【解决方案2】:

相同的结果无论如何,因为如果window.localStorageundefined,你们都会得到false。如果window.localStorage 为空,你将得到false,因为undefined == null

但是,我更喜欢使用!!,因为它是转换为布尔值的最快方法,如果 localStorage 为 false、null、undefined、''、NaN 或 0,它有多大用处?

return !!window.localStorage;

编辑 需要注意的是,它们并不完全相同,因为如果您将 window.localStorage 设置为 undefined,第一个将报告为 true

【讨论】:

  • +1,因为我刚刚在 cmets 中写了相同的内容,然后才注意到您的回答:)
  • @Hemlock 如果 localStorage 属性存在但值为 undefined,则第一个 sn-p 返回 true,但第二个 sn-p 返回 false。
  • @Hemlock 但是如果localStorage是一个字符串,或者一个数字,或者布尔值true,那么它有多大用处,......因此,既然我们真的想检查它是否在浏览器中实现,我相信这是在这种特殊情况下最好的检查:return typeof window.localStorage == 'object';
  • +1 啊,好点(关于编辑和转换)。我的印象是将属性设置为未定义与从对象中删除键相同。我测试过,不是。而且我不知道!! 是转换为布尔值的最快方法。也谢谢你。我会将 Sime 的答案标记为正确,因为正如他所说,对象的类型检查可能是我真正想要的。
  • @Šime 我认为你没有抓住重点。关键是,通过使用 !! 进行过于广泛的测试,您并没有真正错过任何事情。
【解决方案3】:

您可以使用Modernizr(1.1 或更高版本)来检测对 HTML5 本地存储的支持。

if (Modernizr.localstorage) {
  // window.localStorage is available
} else {
  // no support for local storage
}

【讨论】:

    【解决方案4】:

    希望大家推荐以下功能:

    function getLocalStorage(){
       if (typeof localStorage == “object”){
          return localStorage;
       } else if (typeof globalStorage == “object”){
          return globalStorage[location.host];
       } else {
          throw new Error(“Local storage not available.”);
       }
    }
    
    1. 第一次检查足以确保 localStorage 可用
    2. 有些浏览器仍然不支持本地存储,而是支持全局存储。功能集相同,但与localStorga相比有一些差异
    3. 如果不支持任何存储,则抛出异常。

    如果您想了解全局存储,请将其与本地存储进行比较,请参阅“面向 Web 开发人员的 JavaScript”,第 19 章。它描述了客户端本地存储,并将其与 cookie 进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多