【问题标题】:Javascript How to define multiple variables on a single line?Javascript 如何在一行中定义多个变量?
【发布时间】:2022-12-18 14:34:41
【问题描述】:

在线阅读文档,我对如何在一行中正确定义多个 JavaScript 变量感到困惑。

如果我想压缩以下代码,在一行上定义多个 javascript 变量的正确 JavaScript“严格”方法是什么?

var a = 0;
var b = 0;

是吗:

var a = b = 0;

要么

var a = var b = 0; 

ETC...

【问题讨论】:

标签: javascript


【解决方案1】:

使用 Javascript 的 es6 或 node,您可以执行以下操作:

var [a,b,c,d] = [0,1,2,3]

如果您想轻松地在一行中打印多个变量,只需执行以下操作:

console.log(a, b, c, d)

0 1 2 3

这类似于@alex gray 在这里的回答,但这个例子是用 Javascript 而不是 CoffeeScript。

请注意,这使用了 Javascript 的 array destructuring assignment

【讨论】:

  • 为什么不在这种情况下使用console.log(a,b,c,d)呢?它更短并提供相同的输出
  • @Prince Ahmed 的回答表明了另一种选择:let {a,b,c,d} = {"a":0,"b":1, "c":2, "d":3}
【解决方案2】:

你想依赖逗号,因为如果你依赖多重赋值结构,你会在某一时刻搬起石头砸自己的脚。

一个例子是:

>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]

它们都引用内存中的同一个对象,它们不是“唯一的”,因为任何时候你引用一个对象(数组、对象文字、函数)它都是通过引用而不是值传递的。因此,如果您只更改其中一个变量,并希望它们单独行动,您将得不到您想要的结果,因为它们不是单独的对象。

多重赋值也有一个缺点,次要变量变成全局变量,你不想泄漏到全局命名空间中。

(function() {  var a = global = 5 })();
alert(window.global) // 5

最好只使用逗号,并且最好使用大量空格,以便可读:

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];

【讨论】:

  • 这确实是一般分配数组引用的问题,而不仅仅是将赋值语句作为值。
  • “因此,虽然您可以为数字文字之类的东西进行多次右手分配”
  • @meder,这是任何作业的问题。右手没什么特别的。
  • 我的意思是一般的作业。编辑的措辞。
  • 这种多重赋值模式要记住的一点是,在 ES5 严格模式下,任何未声明的赋值都会导致 ReferenceError 异常……IMO,应该避免……
【解决方案3】:

没有办法在一行中以赋值作为值来完成它。

var a = b = 0;

使 b 成为全球性的。正确的方法(不泄漏变量)是稍微长一点的:

var a = 0, b = a;

这在这种情况下很有用:

var a = <someLargeExpressionHere>, b = a, c = a, d = a;

【讨论】:

  • “如果不重复 0,就无法将赋值用作值。” - 你是什么意思?
【解决方案4】:

为什么不分两行呢?

var a, b, c, d;    // All in the same scope
a = b = c = d = 1; // Set value to all.

原因是要保留变量声明的局部作用域,如下所示:

var a = b = c = d = 1;

将导致在窗口范围内隐式声明 bcd

【讨论】:

  • 这对我很有用,因为我在我的程序中预先声明了很多变量。现在,我可以在不牺牲可读性的情况下使用几行,而不是 30 多行。
【解决方案5】:

这是在一行中声明多个变量的新 ES6 方法:

const person = { name: 'Prince', age: 22, id: 1 };

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);

*您的变量名和对象索引需要相同

【讨论】:

  • 这比 OP 的问题要长,因为它等同于 let { a, b } = { a: 0, b: 0 }
【解决方案6】:

具体到 OP 的要求,如果你想用相同的值初始化 N 个变量(例如 0),你可以使用 array destructuringArray.fill 为变量分配一个 N 0s 的数组:

let [a, b, c, d] = Array(4).fill(0);

console.log(a, b, c, d);

【讨论】:

    【解决方案7】:

    请注意,您只能使用数字和字符串来执行此操作

    你可以做...

    var a, b, c; a = b = c = 0; //but why?
    
    c++;
    // c = 1, b = 0, a = 0;
    

    【讨论】:

    • 还有布尔值,不是吗?
    • @Lah Ezcen 是的,我相信所有不可变的数据类型
    【解决方案8】:

    如果它们具有相同的值,请执行此操作

    let x = y = z = 0
    

    否则

    let [x, y, z] = [10, 30, 50]
    console.log(x, y, z) // 10 30 50
    

    【讨论】:

      【解决方案9】:

      这是完全正确的:

      var str1 = str2 = str3 = "value";
      

      如果改变其中一个值,其他变量的值不会改变:

      var str1 = str2 = str3 = "value";
      
      /* Changing value of str2 */
      str2 = "Hi Web!";
      
      document.write("str1 = " + str1 + " - str2 = " + str2 + " - str3 = " + str3);

      【讨论】:

      • 您不关心阅读有关导致 str2 和 str3 成为全局变量的其他警告,对吗?
      【解决方案10】:

      它的压缩类型在这里:

      var a, b = a = "Hi";
      

      & 对于 3 个变量:

      var x, y, z = x = y = "Hello";
      

      希望能有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多