Javascript Как определить несколько переменных в одной строке?

Чтение документации онлайн, я запутался, как правильно определить несколько переменных JavaScript в одной строке.

Если я хочу сконденсировать следующий код, каков правильный "строгий" способ JavaScript для определения нескольких переменных javascript в одной строке?

var a = 0;
var b = 0;

Это:

var a = b = 0;

или

var a = var b = 0; 

и т.д...

Ответ 1

Вы хотите полагаться на запятую, потому что, если вы полагаетесь на конструкцию с несколькими присваиваниями, вы будете стрелять в ногу в какой-то момент.

Пример:

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

Ответ 2

Используя 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.

Обратите внимание, что для этого используется Javascript назначение деструктурирования массива

Ответ 3

Нет способа сделать это в одной строке с присваиванием в качестве значения.

var a = b = 0;

делает б глобальным. Правильный путь (без утечек переменных) немного длиннее:

var a = 0, b = a;

что полезно в случае:

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

Ответ 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;

приведет к неявным объявлениям b, c и d в области окна.

Ответ 5

Вот новый метод ES6 объявления нескольких переменных в одной строке:

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

let {name, age, id} = person;

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

Ответ 6

В частности, к тому, что запросил OP, если вы хотите инициализировать N переменных с одним и тем же значением (например, 0), вы можете использовать массив destructuring и Array.fill, чтобы присвоить переменным массив из N 0 s:

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

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

Ответ 7

Заметьте, что вы можете делать это только с помощью Numbers and Strings

вы могли бы сделать...

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

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