Сокращение для установки значений переменных - PullRequest
3 голосов
/ 22 июня 2011

Я пытаюсь объявить 2 переменные одним и тем же значением (false).

Я склонен делать это повсеместно (например, почти в каждом объекте, который я создаю):

var $a= {border:false
,frame:false};

или поочередно

border=false;frame=false;

Есть ли лучший способ объявить значение обоих одновременно?(например, кодовое решение для гольфа) * ​​1009 *

Ответы [ 3 ]

3 голосов
/ 22 июня 2011

Можно, если обе переменные объявлены при установке значения.Это немного странно, но работает:

var frame, 
    border = frame = false;

(думаю, это будет самое короткое время, которое вы можете получить)

Это лучше?Я так не думаю, и вы не особо экономите.Более читабельным является

var frame = false, 
    border = false;

На самом деле есть еще несколько комбинаций, которые вы можете сделать, но вы не можете сделать это без повторения имени переменной или значения.Например, вы также можете сделать:

var frame = false, 
    border = frame;

Конечно, это работает только для примитивных значений (т. Е. Логических, (литеральных) чисел, (литеральных) строк).Если вы имеете дело с объектами (включая массивы), тогда обе переменные будут ссылаться на один и тот же объект.В этом случае вам действительно нужно инициализировать их отдельно:

var frame = {}, 
    border = {};

// DON'T DO THIS:
var frame, 
    border = frame = {};

Обновление , потому что я чувствую необходимость объяснить, почему var border = frame = false; делает не work:

var не является здесь транзитивным, и это выражение фактически оценивается справа налево.Сначала false присваивается frame, который будет найден в цепочке областей действия и в худшем случае станет глобальным.Затем значение frame присваивается локальной переменной border.

2 голосов
/ 22 июня 2011

Вы можете сделать это:

var border = frame = false;
1 голос
/ 23 июня 2011

Рассмотрим:

var border, frame;

border = frame = false;
...