Как определить несколько переменных в одной строке? - PullRequest
78 голосов
/ 12 ноября 2010

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

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

var a = 0;
var b = 0;

Это:

var a = b = 0;

или

var a = var b = 0; 

и т.д ...

Ответы [ 7 ]

65 голосов
/ 12 ноября 2010

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

Примером может быть:

>>> 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 = [];
38 голосов
/ 26 августа 2016

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

38 голосов
/ 12 ноября 2010

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

var a = b = 0;

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

var a = 0, b = a;
21 голосов
/ 15 июля 2016

Почему бы не сделать это в две строки?

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 в области видимости окна.

1 голос
/ 06 марта 2019

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

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

console.log(a, b, c, d);
0 голосов
/ 19 февраля 2019

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

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

let {name, age, id} = person;

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

* Ваше имя переменной и индекс объекта должны совпадать

0 голосов
/ 08 июля 2014

обратите внимание, что вы можете сделать это только с числами и строками

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

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

c++;
// c = 1, b = 0, a = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...