LocalStorage,JavaScript和Objects

时间:2012-05-16 13:15:44

标签: javascript html5 local-storage

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

我的问题在于实际创建对象:我在sessionStorage中有两个值需要添加到对象中,然后传递给localStorage。但是,当我尝试创建对象时,会将一个值存储为变量名称而不是其(数值)值。有什么想法在这里发生吗?

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

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

2 个答案:

答案 0 :(得分:4)

这一行:

var temp = {siteID:siteName};

...创建一个包含名为siteId的属性的对象,其值取自siteName变量。

如果您希望从siteID变量取代属性名称:

var temp = {};
temp[siteID] = siteName;

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

// ES2015+ only!
var temp = {[siteId]: siteName};

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

obj.foo = "bar";    // Creates a `foo` property on `obj` with the value `"bar"`

...或使用括号内的表示法和字符串:

obj["foo"] = "bar"; // Does the same thing

var temp = {siteID:siteName};这样的对象初始值设定项中的键总是按字面意思使用(尽管它们可以选择使用引号);对象初始化器无法从变量中获取密钥。所以你必须分两步完成,首先创建对象,然后设置属性。

所以,如果你这样做

temp[siteID] = siteName;

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

var temp = {};
var key = 1;
temp[key] = "value";
console.log(temp[1]); // "value"
console.log(temp["1"]); // "value"

(属性名称始终是JavaScript中的字符串[暂时]。)

答案 1 :(得分:2)

将其更改为此。

var temp = {};

temp[siteName] = siteID;

或者如果typeof测试是为了显示属性名称,那么你可以反转它们。

var temp = {};

temp[siteID] = siteName;

但请注意,siteID从那时起被视为字符串。