【问题标题】:Assign two variables to the same value with one expression? [duplicate]用一个表达式将两个变量分配给相同的值? [复制]
【发布时间】:2016-09-03 15:18:42
【问题描述】:

有没有办法将两个变量分配给相同的值?

刚刚试过这个:

let x, y = 'hi'

它正在编译为:

'use strict';

var x = void 0,
    y = 'hi';

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

绝对没有理由更喜欢解构赋值而不是简单

let x = 'hi', y = x;

它不仅是一个语句而不是两个语句,而且还避免了额外的分配(所提供的解构解决方案毫无理由地分配了至少一个对象)。

【讨论】:

  • 好的,但是 5 个变量呢? let x = 'hi', a = x, b = x, c = x, d = x。太难读了。
  • @DmitriPavlutin 只是不要编写要求您创建 5 个相同变量的代码(一开始看起来很尴尬)
  • @zerkms 我想你的意思是说“绝对没有理由更喜欢 解构赋值let x = 'hi', y = x;
  • @BlazeSahlzen 是的,谢谢。
【解决方案2】:

是的,有可能:

let x, y;
x = y = 'hi';

称为链式赋值,可以将单个值赋给多个变量。
查看有关assignment operator的更多详细信息。


如果你有两个以上的变量,可以使用数组破坏赋值:

let [w, x, y, z] = Array(4).fill('hi');

【讨论】:

    【解决方案3】:

    你可以这样做..但我的建议尽量避免它。

    var one, two, three;
    one = two = three = "";
    

    【讨论】:

    • JS 本身不使用字符串等明确定义的类型。
    • 我为什么要避免它?
    • @torazaburo 因为这是一个强烈的积极信号,表明您做错了。只需创建一个变量,而不是 3 个具有相同数据的变量。
    • 嗯?如果我有两个或三个不同的变量,我碰巧想初始化为相同的值怎么办?
    • 我真的不在乎,这是一个半愚蠢的问题,但是是的,我可以很容易地想象我有两个计数器的情况,比如说,想将它们都初始化为零。但是,我认为没有理由不直接说var x=0, y=0;
    【解决方案4】:

    这是预期的行为。来自EMCA-262 6th edition

    如果 let 声明中的 LexicalBinding 没有 Initializer 变量被赋值undefinedLexicalBinding 被评估。

    【讨论】:

      【解决方案5】:
      var x = y = 'hi';
      alert('x'+x);
      alert('y'+y);
      

      Fiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-08
        • 2018-10-18
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        相关资源
        最近更新 更多