LocalStorage、JavaScript 和对象

Squ*_*shy 5 html javascript local-storage

我需要在 localStorage 中存储一个对象 - 而且我知道为了做到这一点,我必须将该对象转换为字符串。一切都很酷。

我的问题是首先实际创建对象:我在 sessionStorage 中有两个值需要添加到对象中,然后将其传递到 localStorage 中。但是,当我尝试创建对象时,一个值被存储为变量名称而不是其(数字)值。知道这是怎么回事吗?

var siteName = sessionStorage['1'];
var siteID = (+sessionStorage['2']);
var temp = {siteID:siteName};
alert(typeof siteID);
alert(JSON.stringify(temp));
Run Code Online (Sandbox Code Playgroud)

第一个警报确认 siteID 确实是数字类型,但第二个警报显示存储的是变量名称 (siteID),而不是其数值。

T.J*_*der 4

这行:

var temp = {siteID:siteName};
Run Code Online (Sandbox Code Playgroud)

...创建一个包含属性的对象,该属性使用siteId从变量中获取的值进行调用siteName

如果您希望从变量中获取属性名称siteID

var temp = {};
temp[siteID] = siteName;
Run Code Online (Sandbox Code Playgroud)

或者在 ES2015(又名“ES6”)中,您可以使用新的计算属性名称语法:

// ES2015+ only!
var temp = {[siteId]: siteName};
Run Code Online (Sandbox Code Playgroud)

在 JavaScript 中,您可以通过两种不同但相同的方式访问/创建对象的属性: 使用带有文字属性名称的点符号:

obj.foo = "bar";    // Creates a `foo` property on `obj` with the value `"bar"`
Run Code Online (Sandbox Code Playgroud)

...或使用括号符号和字符串:

obj["foo"] = "bar"; // Does the same thing
Run Code Online (Sandbox Code Playgroud)

像您这样的对象初始值设定项中的键var temp = {siteID:siteName};始终按字面意思使用(尽管它们可以选择用引号引起来);对象初始值设定项无法从变量中获取键。因此,您必须分两步进行,首先创建对象,然后设置属性。

所以,如果你这样做

temp[siteID] = siteName;
Run Code Online (Sandbox Code Playgroud)

...中的数字siteID将被转换为字符串,并将成为属性名称,值为siteNamevalue。

var temp = {};
var key = 1;
temp[key] = "value";
console.log(temp[1]); // "value"
console.log(temp["1"]); // "value"
Run Code Online (Sandbox Code Playgroud)

(属性名称在 JavaScript 中始终是字符串[目前]。)