我需要在localStorage中存储一个对象 - 我知道为了这样做,我必须将对象转换为字符串。一切都很酷。
我的问题在于实际创建对象:我在sessionStorage中有两个值需要添加到对象中,然后传递给localStorage。但是,当我尝试创建对象时,会将一个值存储为变量名称而不是其(数值)值。有什么想法在这里发生吗?
var siteName = sessionStorage['1'];
var siteID = (+sessionStorage['2']);
var temp = {siteID:siteName};
alert(typeof siteID);
alert(JSON.stringify(temp));
第一个警报确认siteID确实是数字类型,但第二个警报显示存储变量名称(siteID)而不是其数值。
答案 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
从那时起被视为字符串。