如何根据对象属性的值创建动态变量名称。例如:
let imgdata = {
serverid: 6,
name: 'test.jpg'
}
//this does not work
let [imgdata.serverid] = imgdata
//Obviously this won't work
myArr.push([imgdata.serverid])
基本上我想要“imgdata.serverid”值即。"6" = imgdata.
谁能帮我解决这个问题?
如何根据对象属性的值创建动态变量名称。例如:
let imgdata = {
serverid: 6,
name: 'test.jpg'
}
//this does not work
let [imgdata.serverid] = imgdata
//Obviously this won't work
myArr.push([imgdata.serverid])
基本上我想要“imgdata.serverid”值即。"6" = imgdata.
谁能帮我解决这个问题?
TA贡献1574条经验 获得超8个赞
变量名的规则是:
1 - They must be unique to the scope
2 - They must start with a letter, $ or _
3 - They are case-sensitive - so, y and Y are two different variables
4 - They must not be keywords/reserved words - such as "if", "return", "class" etc
6 或“6”的变量名不符合这些规则。
此外,6 或“6”很容易被误解。
例如,如果我们假设以下运行没有错误(当然不会):
let 6 = imgdata;
let "7" = imgdata2;
let a = 6;
let b = "7";
你认为 a 和 b 会有什么值?6 和“7”,当然不是 imgdata 和 imgdata2。
而且,javascript 将如何解释:
let 6 = 7;
let "a" = "b";
?而且,如果你能做到这一点,从那时起数学将如何运作?例如,您不能使用计数器或交互变量,因为一旦它们达到 6,下一个数字就会是 8,因为 6=7 且 7+1 = 8。
这里的要点是字母在字符串内有含义但在字符串外没有意义,因此可以安全地用于变量名(在上述规则内)。但是,数字可以是字符串或数字的一部分。因此,123 和“123”可能看起来相同,但它们是不同类型的对象——一个数字和一个字符串——两者都是完全有效的。然而,abc 和 "abc" 也可能看起来相同,但 abc 没有任何意义,除非它之前被定义为一个变量,而 "abc" 是一个字符串 - 因此,如果 abc 没有被定义, let x = abc 将触发错误定义为变量,但 let x = "abc" 是完全有效的。
您将需要使用另一种方法来存储您的值或使用 window["xxx" + imgdata.serverid] 格式的有效变量名称(如果您仍然需要动态变量名称并将“xxx”替换为您选择的前缀). 我的建议是使用地图——键是 imgdata.serverid,它的值是 imgdata。这样,您始终可以使用 mymap.get(6) 检索值;映射键可以是字符串或数字,您可以在同一个映射中使用这两种键——您只需要记住 mymap.get(6) 和 mymap.get("6") 将指向不同的映射条目。而且,您可以随时使用 mymap.set(6, newvalue) 更改该值。
TA贡献1626条经验 获得超9个赞
“6”不是有效变量,但如果您选择一个可以作为有效变量的值,则可以完成此操作,但仅限于 widnow。我重复“仅使用窗口对象”,否则无法在 Javascript 中创建动态变量。
let imgdata = {
serverid: 'hello',
name: 'test'
};
window[imgdata.serverid] = imgdata;
console.log(hello);
hello是 的值imgdata.serverid,这里hello将成为 的属性window object。这是一个 JS 特性,我们可以在window object's property没有窗口的情况下调用 any,就像window.console可以调用 as一样console。
TA贡献1652条经验 获得超4个赞
这会给serverid = 6。
imgdata所以object你需要用于object解构
let imgdata = {
serverid: 6,
name: 'test.jpg'
}
let {serverid} = imgdata;
举报