Является ли установка нескольких переменных в 1 строке допустимой в JavaScript?(var x = y = 'value';) - PullRequest
30 голосов
/ 28 сентября 2011

Это действительно в php:

$x=$y='value';

При этом значения $ x и $ y будут равны 'value'.

Это действительно в javascript?

var x=y='value';

Я протестировал его в chrome console, и он работал, как и ожидалось, но просто хотел перепроверить, прежде чем начать его использовать.

Ответы [ 5 ]

66 голосов
/ 28 сентября 2011

Это работает, только если var y, как было ранее , определено , в противном случае y будет global .

В таком случае вам лучше сделать:

var x, y;
x = y = 'value';

Цепочка назначений

Другой антипаттерн, который создает подразумеваемые глобальные переменные, - это цепочка назначений как часть объявления var.В следующем фрагменте a является локальным, но b становится глобальным, что, вероятно, не то, что вы хотели сделать:

// antipattern, do not use
function foo() {
   var a = b = 0;
   // ...
}

Если вам интересно, почему это происходит, это потому, чтосправа налево оценки.Сначала вычисляется выражение b = 0, и в этом случае b не объявляется.Возвращаемое значение этого выражения - 0, и оно присваивается новой локальной переменной, объявленной с var a.Другими словами, это как если бы вы набрали:

var a = (b = 0);

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

function foo() {
   var a, b;
   // ...
   a = b = 0; // both local
}

«Шаблоны JavaScript», автор Стоян Стефанов (О'Рейли).Copyright 2010 Yahoo !, Inc., 9780596806750. ”

7 голосов
/ 28 сентября 2011

Чтобы предотвратить превращение y в глобальную переменную, используйте следующее:

var x, y = x = 'value';

Видимо, объявления просто оцениваются слева направо.

3 голосов
/ 08 февраля 2018

Я почти уверен, что самая читаемая форма - это та, которую еще не поднимали:

let x = 0, y = 0
1 голос
/ 28 сентября 2011

Да, это действительно в Javascript.

Однако, после поиска проблемы, этот вопрос переполнения стека объясняет некоторые предостережения, поэтому используйте с осторожностью.

0 голосов
/ 17 октября 2018

Когда переменные имеют разные значения, вы можете легко написать:

var x = 0,
    y = 1,
    ...
    z = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...