为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2023-03-18 16:50:26
如何根据对象属性的值创建动态变量名称。例如:let imgdata = {   serverid: 6,   name: 'test.jpg'}//this does not work let [imgdata.serverid] = imgdata//Obviously this won't workmyArr.push([imgdata.serverid])基本上我想要“imgdata.serverid”值即。"6" = imgdata.谁能帮我解决这个问题?
查看完整描述

4 回答

?
青春有我

TA贡献1784条经验 获得超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) 更改该值。


查看完整回答
反对 回复 2023-03-18
?
慕码人2483693

TA贡献1860条经验 获得超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。


查看完整回答
反对 回复 2023-03-18
?
MMTTMM

TA贡献1869条经验 获得超4个赞

这会给serverid = 6。


imgdata所以object你需要用于object解构


let imgdata = {

   serverid: 6,

   name: 'test.jpg'

}


let {serverid} = imgdata;


查看完整回答
反对 回复 2023-03-18
?
慕勒3428872

TA贡献1848条经验 获得超5个赞

imgdata.serverid应该是右边的表达式。

let serverid = imgdata.serverid;


查看完整回答
反对 回复 2023-03-18
  • 4 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信