本地存储、JavaScript和对象
我需要在localStorage中存储一个对象——我知道为了这样做,我必须将该对象转换为字符串。都很酷 我的问题首先在于实际创建对象:sessionStorage中有两个值需要添加到对象中,然后将其传递到localStorage。但是,当我尝试创建对象时,一个值被存储为变量名,而不是它的(数字)值。知道这是怎么回事吗本地存储、JavaScript和对象,javascript,html,local-storage,Javascript,Html,Local Storage,我需要在localStorage中存储一个对象——我知道为了这样做,我必须将该对象转换为字符串。都很酷 我的问题首先在于实际创建对象:sessionStorage中有两个值需要添加到对象中,然后将其传递到localStorage。但是,当我尝试创建对象时,一个值被存储为变量名,而不是它的(数字)值。知道这是怎么回事吗 var siteName = sessionStorage['1']; var siteID = (+sessionStorage['2']); var temp = {siteI
var siteName = sessionStorage['1'];
var siteID = (+sessionStorage['2']);
var temp = {siteID:siteName};
alert(typeof siteID);
alert(JSON.stringify(temp));
第一个警报确认siteID确实是数字类型,但第二个警报显示存储的是变量名(siteID),而不是其数值 将其更改为此
var temp = {};
temp[siteName] = siteID;
或者,如果typeof
测试的目的是显示属性名,您可以将其反转
var temp = {};
temp[siteID] = siteName;
但请注意,从该点开始,siteID
被视为一个字符串。这一行:
var temp = {siteID:siteName};
…创建一个包含名为siteId
的属性的对象,该属性的值取自siteName
变量
如果希望从siteID
变量获取属性名称,请执行以下操作:
var temp = {};
temp[siteID] = siteName;
或者在ES2015(也称为“ES6”)中,您可以使用新的计算属性名称语法:
在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中始终是字符串。)我想您已经有了键/值backwards@Mathletics:是的,你说得对。我被
测试的类型弄糊涂了,认为这就是值。我会更新的。谢谢你的提示。也谢谢你的解释(先看了你的电子编辑版;)-清楚地解释了3个没用的教程不能做的事情@斯奎西:很高兴听到这个消息!
var temp = {};
var key = 1;
temp[key] = "value";
console.log(temp[1]); // "value"
console.log(temp["1"]); // "value"