【问题标题】:Declare and initiate multiple javascript variables [closed]声明并启动多个 javascript 变量 [关闭]
【发布时间】:2020-11-26 04:42:47
【问题描述】:

对于正确声明和初始化多个相同类型的变量的正确方法,我有点困惑。所以它们实际上是他们自己的,而不是对他人/副本的引用。

我的研究使我得出以下结论,对吗?和/或有更好的方法:

var str1,str2,str3,arr1,arr2,arr3,obj1,obj2,obj3;

str1=str2=str3="foo";

arr1=arr2=arr2=[];

obj1=obj2=obj3={};

(为此我想使用 var,而不是 let 和 const)

【问题讨论】:

  • 更大的问题是逐渐熟悉将单个数组或对象分配给多个变量意味着什么,它将被共享​​>
  • 你做对了。更多列出了in my answer there(他们使用const,但同样适用于var)。
  • @FZs 感谢您的建设性回答和链接。弹出它作为自己的答案,我会将其设置为接受的答案。
  • 它们是共享的。 x = y = z = [] 将使 x、y 和 z 都指向同一个数组。如果您将元素推送/弹出到数组中,所有三个变量都将显示该更改。与对象相同。如果您更改对象的属性,则指向该对象的所有变量都会反映该更改。
  • F12 并弹出浏览器开发工具并转到“控制台”选项卡,然后尝试以下操作:var x,y,z; x = y = z = []; x[0] = 'a'; console.log(x, y, z);

标签: javascript


【解决方案1】:

我之前回答过a similar question。这是我的答案(相应修改):


有多种方法可以做到这一点。

  1. 重复值:

    var a = 1, b = 1, c = 1;
    
    console.log(a, b, c) //1 1 1
  2. 相互分配变量(提示:把名字最短的放在前面,然后重复那个):

    var a = 1, b = a, c = a;
    
    console.log(a, b, c) //1 1 1
  3. 使用你的方法:

    var a, b, c;
    a = b = c = 1
    
    console.log(a, b, c) //1 1 1
  4. 解构一个无限迭代器(这在变量非常多的情况下似乎很有用):

    var [a, b, c] = (function*(v){while(true) yield v})(1);
                                                       // ^--- Value
    
    console.log(a, b, c) //1 1 1

但是,当涉及到对象字面量、函数的返回值和类似的东西时,它们的行为会有所不同(这取决于您应该选择的用例)。

  • 解决方案 1. 将为每个变量创建不同的值

  • 解决方案 2.、3. 和 4. 将为所有变量分配相同的值

  • 解决方案 4. 可以修改以分配不同的值:

    var [a, b, c] = (function*(){while(true) yield [1,2,3] })();
                                                // ^^^^^^^--- Value
    
    console.log(a, b, c) //[1,2,3] [1,2,3] [1,2,3]

【讨论】:

  • 谢谢,但是@Taplar 上面指出的,数组和对象将被共享呢?我需要他们成为他们自己的人。
  • @Jason 我注意到了。看我答案的结尾……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2011-05-04
  • 1970-01-01
  • 2021-01-09
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多