为什么 localStorage["..."] 未定义,但 localStorage.getItem("...") 为 null?

2023-12-24

上次我检查时,返回了以下两行true:

null == localStorage["foo"];
null == localStorage.getItem("foo");

更换时同样适用null with undefined。 那么第一个问题是,为什么有两种方式来寻址localStorage?为什么会这样

localStorage["foo"]

return undefined while

localStorage.getItem("foo")

returns null?

开发JS的时候需要注意这个吗?


The 网络存储规范要求 http://dev.w3.org/html5/webstorage/#the-storage-interface that .getItem()回报null对于未知的密钥。

但请注意.getItem() and .setItem()在 IDL 中被明确定义为指定的getter and setter为了Storage接口,因此它们也是完全支持的访问存储内容的方式。

但是,那[]语法更类似于普通对象和/或数组属性 getter,并且像那些返回一样undefined对于未知的属性名称。

原因not to use []语法是,它将首先对对象属性进行操作,并且很高兴地允许您覆盖对象的真实属性和方法localStorage对象,参见:

> localStorage['getItem'] = function() { return 0 }
> localStorage.getItem('getItem')
0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 localStorage["..."] 未定义,但 localStorage.getItem("...") 为 null? 的相关文章

随机推荐

  • 在Python中使用循环来命名变量[重复]

    这个问题在这里已经有答案了 如何使用循环来命名变量 例如 如果我想要一个变量double 1 2 double 2 4一直到double 12 24 我该怎么写呢 我感觉它会是这样的 for x in range 1 13 double x
  • jQuery 搜索过滤器 - 在输入框中搜索

    我正在使用 jQuery 搜索过滤器 它运行良好 不过 我还需要在输入框中进行搜索和过滤 输入框都是文本类型 我需要像其他表列中的文本一样使用该值 我创造了一个小提琴 http jsfiddle net ktcle Jf6q5 http j
  • JPA @ManyToOne 在删除最后一个子项时自动删除父项

    我有一个由 ManyToOne 从子级到父级的单向映射 如下所示 ManyToOne JoinColumn name PARENT ID private ParentEntity parent 当最后一个子实体被删除而没有从 ParentE
  • 存储过程未在另一个存储过程中执行

    我发现执行 SP1 时 SP2 不会从 SP1 内执行 SP1的结构如下 ALTER PROCEDURE SP1 AS BEGIN Declare c1 cursor open c1 fetch next from c1 while fet
  • 将多个参数传递给线程函数

    我有一个名为 workForThread 的函数 它接受两个参数 并返回 void 我想使用类似的方法来线程化这个函数 thread workForThread a b Where a and b属于适当的类型 上面的代码无法编译 给出 调
  • Visual Studio 2010 数据比较自动化

    我注意到在高级版数据菜单中带有数据比较选项 它可以满足我需要的一切 只是想知道是否有一种方法可以自动执行我的应用程序中 GUI 中的操作 理想情况下 我想获得不同 左 右行的集合 在这篇博客中 我将引导您了解 Data NewDataCom
  • 使用独特的 bean 进行 spring 自动装配:Spring 期望单个匹配的 bean,但发现了 2 个

    我正在尝试使用 Spring 自动装配一些 bean 用于依赖注入 作为 web 应用程序 一个控制器 bean 包含另一个 bean 而另一个 bean 又保存另一组 bean 的哈希图 目前该地图只有一个条目 当我在 tomcat 中运
  • Apache Solr 中的多对一映射

    我正在使用 Solr 来索引我的报告数据库 报告可以包含文本 提交者信息等 当前的工作原理如下 docs Text Some Report Text ReportId 1 Date 2013 08 09T14 59 28 147Z Subm
  • 当用户未登录时,Servlet 过滤器在无限重定向循环中运行

    我有两个 HTML 文件 登录 html 测试 html 我的要求是用户不应该能够访问 test html 除非他通过 login html 成功登录 这是我的login html 文件
  • 快速 (< n^2) 聚类算法

    我有 100 万个 5 维点 需要将它们分组为 k 个簇 其中 k 但 我需要运行时间远低于 n 2 n log n 左右应该没问题 我进行此聚类的原因是为了避免计算所有 n 个点的距离矩阵 这需要 n 2 时间或多个小时 而是我只想计算聚
  • Linq-to-Entity 查询的动态谓词

    以下 Linq to Entities 查询工作正常 var query repository Where r gt r YearProp1 HasValue r YearProp1 gt minYear r YearProp1 lt ma
  • 使用实体框架删除项目

    我正在尝试使用实体框架删除一个对象 在互联网上的所有教程中 我发现为了做到这一点 您必须调用DeleteObject方法结合上下文 我尝试这样做 但似乎我没有DeleteObject方法 这是我的代码 public void DeleteB
  • 选择子网格中的行会选择父网格中具有相同行索引的行

    我已经在 Rowexpander 插件中实现了嵌套网格 现在的问题是 当我选择子网格的任何第 n 行时 父网格第 n 行也会被选中 我认为因为两者都有相同的 rowIndex 即使当我将鼠标悬停在子网格行上时 父级也会同时显示相同的鼠标悬停
  • cpp中的接口

    我想在 cpp 中创建接口 这样任何类都实现该类 那么该类必须实现父类的函数 如果所有功能都没有实现 那么它一定会显示错误 class parent interface class public virtual void display c
  • socket.io,动态添加消息处理程序

    我很高兴编写了一个node js 服务器 它使用socket io 与客户端通信 这一切都运作良好 socket on connection 处理程序有点大 这让我想到了另一种组织代码并将处理程序添加到生成器函数中的方法 如下所示 sess
  • AWS Lambda“进程在完成请求之前退出”

    我正在尝试打电话DynamoDB客户端方法并从 DynamoDB 表中获取一项 我在用AWS Lambda 然而 我不断收到这样的消息 进程在完成请求之前退出 我增加了超时只是为了确保 但处理时间小于超时 有什么建议吗 console lo
  • OnResume 在片段内多次调用

    I have 内部片段里面包含RecyclerView主片段添加到浏览器 当 MainFragment 被创建时 同时滑动 OnResume 被多次调用 第一次 OnResume 在 MainFragment 中调用一次 在 InnerFr
  • Ruby,检查字符串是否都是有效的十六进制字符?

    我必须检查 4 个字符的字符串是否都是有效的十六进制 我发现了另一个问题 它准确地演示了我想要做什么 但它是 Java 用于检查字符串仅包含十六进制字符的正则表达式 https stackoverflow com questions 531
  • 如何使用逆 CDF 在 Python 中随机采样对数正态数据并指定目标百分位数?

    我正在尝试从 Python 中的对数正态分布生成随机样本 该应用程序用于模拟网络流量 我想生成这样的样本 模态样本结果为 320 10 2 5 80 的样本位于 100 到 1000 10 2 到 10 3 范围内 我的策略是使用逆 CDF
  • 为什么 localStorage["..."] 未定义,但 localStorage.getItem("...") 为 null?

    上次我检查时 返回了以下两行true null localStorage foo null localStorage getItem foo 更换时同样适用null with undefined 那么第一个问题是 为什么有两种方式来寻址lo