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

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

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

var a = 0;
var b = 0;

是这样吗:

var a = b = 0;

或者

var a = var b = 0;

等等。

271561 次浏览

你需要依赖逗号,因为如果你依赖于多重赋值结构,你会在某一点上打到自己的脚。

例如:

>>> 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 = [];

没有办法在一行中做到这一点,赋值为值。

var a = b = 0;

正确的方法(不泄漏变量)是稍微长一点:

var a = 0, b = a;

这在这种情况下是有用的:

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

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

你可以..。

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


c++;
// c = 1, b = 0, a = 0;

为什么不用两行呢?

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

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

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

如果您想在一行中轻松地打印多个变量,只需这样做:

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

0123

这与@alexgray 的回答类似,但是这个例子是用 Javascript 代替 CoffeeScript。

注意,这里使用的是 Javascript 的 数组解析赋值数组解析赋值

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

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


let {name, age, id} = person;


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

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

具体到 OP 要求的,如果你想用相同的值初始化 N 个变量(例如 0) ,你可以使用 数组解构数组解构数组,填充为变量赋值一个 N 个 0的数组:

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


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

这完全正确:

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);

如果它们具有相同的价值,就这样做

let x = y = z = 0

否则

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

压缩类型如下:

var a, b = a = "Hi";

& 对于3个变量:

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

希望能帮上忙!