是否可以在 LocalStorage 中使用 ES6 符号

sjb*_*sse 4 javascript local-storage ecmascript-6

当使用 ES6Symbol作为 中的键/值对的键时LocalStorage,我们在重新加载页面后仍然可以访问它吗?

我发现本教程声称在使用 时这是可能的Symbol.for,但到目前为止我没有成功,并且undefined当我尝试检索 LocalStorage 键/值对时得到一个。

Symbols作为一个附带问题:在这里使用有意义吗?

sdg*_*uck 5

您可以使用符号作为对象中的键 - 这是它们的目的之一。但这localStorage不是您的典型对象。它有一个 API 可以在商店中设置/获取值,您共享的教程未使用该 API:localStorage.{set,get}Item()

不幸的是,localStorage不接受符号作为键,只接受字符串。所以真正的答案是否定的,你不能使用符号作为 LocalStorage 中的键,但是......

可以执行以下操作。它实际上并不是使用符号作为键,而是使用符号toString()表示:

const sym = Symbol.for('Hello').toString()
localStorage.setItem(sym, 'World')
document.write('Hello, ' + localStorage.getItem(sym))
Run Code Online (Sandbox Code Playgroud)

[在 jsbin.com 上查看]

作为一个附带问题:在这里使用符号有意义吗?

我想你可以使用保留符号(例如Symbol.iterator)来扩展全局的功能localStorage。但这有点离题了。

  • @sjbuysse没有任何优势,但您可能会在应用程序中的对象中的其他地方使用符号,然后您也希望在 LocalStorage 中使用符号以保持一致性。 (5认同)
  • @sjbuysse 没有。这就是为什么你不应该这样做。 (2认同)