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

时间:2010-11-12 16:27:05

标签: javascript

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

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

var a = 0;
var b = 0;

是吗:

var a = b = 0;

var a = var b = 0; 

等...

8 个答案:

答案 0 :(得分:64)

你想要依赖逗号,因为如果你依赖于多重赋值结构,你就会在某一点上射击自己。

一个例子是:

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

答案 1 :(得分:38)

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

var a = b = 0;

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

var a = 0, b = a;

答案 2 :(得分:36)

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

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

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

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

0 1 2 3

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

答案 3 :(得分:20)

为什么不分两行呢?

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的隐式声明。

答案 4 :(得分:1)

具体根据OP的要求,如果要初始化具有相同值的N个变量(例如0),则可以使用array destructuringArray.fill来分配给变量N个0数组:

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

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

答案 5 :(得分:0)

请注意,您只能使用数字和字符串

执行此操作 你可以做......

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

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

答案 6 :(得分:0)

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

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

let {name, age, id} = person;

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

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

答案 7 :(得分:0)

这是完全正确的:

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