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),而不是其数值。
这行:
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 中始终是字符串[目前]。)