如何根据对象属性的值创建动态变量名称

如何根据对象属性的值创建动态变量名称。例如:


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.


谁能帮我解决这个问题?


www说
浏览 102回答 4
4回答

青春有我

变量名的规则是:1 - They must be unique to the scope2 - They must start with a letter, $ or _3 - They are case-sensitive - so, y and Y are two different variables4 - They must not be keywords/reserved words - such as "if", "return", "class" etc6 或“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) 更改该值。

慕码人2483693

“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。

MMTTMM

这会给serverid = 6。imgdata所以object你需要用于object解构let imgdata = {   serverid: 6,   name: 'test.jpg'}let {serverid} = imgdata;

慕勒3428872

imgdata.serverid应该是右边的表达式。let serverid = imgdata.serverid;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript