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;