Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本地存储、JavaScript和对象_Javascript_Html_Local Storage - Fatal编程技术网

本地存储、JavaScript和对象

本地存储、JavaScript和对象,javascript,html,local-storage,Javascript,Html,Local Storage,我需要在localStorage中存储一个对象——我知道为了这样做,我必须将该对象转换为字符串。都很酷 我的问题首先在于实际创建对象:sessionStorage中有两个值需要添加到对象中,然后将其传递到localStorage。但是,当我尝试创建对象时,一个值被存储为变量名,而不是它的(数字)值。知道这是怎么回事吗 var siteName = sessionStorage['1']; var siteID = (+sessionStorage['2']); var temp = {siteI

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

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

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"