如何在一行上定义多个变量?

Hea*_*erK 86 javascript

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

如果我想压缩以下代码,那么在一行中定义多个javascript变量的JavaScript"严格"方法是什么?

var a = 0;
var b = 0;
Run Code Online (Sandbox Code Playgroud)

是吗:

var a = b = 0;
Run Code Online (Sandbox Code Playgroud)

要么

var a = var b = 0; 
Run Code Online (Sandbox Code Playgroud)

等等...

med*_*iev 67

你想依靠逗号,因为如果你依赖于多重赋值结构,你将会在一个或另一个角落射击自己.

一个例子是:

>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]
Run Code Online (Sandbox Code Playgroud)

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

多重赋值还有一个缺点,即辅助变量变为全局变量,并且您不希望泄漏到全局命名空间中.

(function() {  var a = global = 5 })();
alert(window.global) // 5
Run Code Online (Sandbox Code Playgroud)

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

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];
Run Code Online (Sandbox Code Playgroud)

  • 这通常是分配数组引用的问题,而不仅仅是将赋值语句作为值. (2认同)
  • @meder,这是任何作业的问题。右手没什么特别的。 (2认同)
  • 这种多重分配模式要记住的一点是,在ES5严格模式下,任何未声明的分配都将导致`ReferenceError`异常... IMO,应避免使用... (2认同)

mod*_*tos 46

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

var [a,b,c,d] = [0,1,2,3]
Run Code Online (Sandbox Code Playgroud)

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

console.log(a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

0 1 2 3

这类似于@alex grey的答案,但这个例子是用Javascript而不是CoffeeScript.

  • 为什么不在这种情况下使用`console.log(a,b,c,d)`呢?它更短,并提供相同的输出 (2认同)

Mat*_*hen 38

没有办法在一行中将赋值作为值.

var a = b = 0;
Run Code Online (Sandbox Code Playgroud)

让b全球化.正确的方法(没有泄漏变量)稍长:

var a = 0, b = a;
Run Code Online (Sandbox Code Playgroud)


Nic*_*kis 23

为什么不分两行呢?

var a, b, c, d;    //All in the same scope
a = b = c = d = 1; // Set value to all.
Run Code Online (Sandbox Code Playgroud)

原因是,保留变量声明的局部范围,如下所示:

var a = b = c = d = 1;
Run Code Online (Sandbox Code Playgroud)

会导致隐含的声明b,cd在窗口范围.


小智 14

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

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

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);
Run Code Online (Sandbox Code Playgroud)

*你的变量名和对象索引必须相同

  • 这比 OP 的问题要长,因为它等价于 `let { a, b } = { a: 0, b: 0 }`。 (4认同)

Dan*_*scu 8

具体到OP所要求的,如果你想用相同的值初始化N个变量(例如0),你可以使用数组解构Array.fill将N个数组分配给变量0

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

console.log(a, b, c, d);
Run Code Online (Sandbox Code Playgroud)