Подтвердить что ты не робот

Является ли установка нескольких переменных в 1 строке действительной в javascript? (var x = y = 'value';)

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

$x=$y='value';

Это будет означать как $x, так и $y значение value.

Является ли это действительным в javascript?

var x=y='value';

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

4b9b3361

Ответ 1

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

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

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, Стоян Стефанов (OReilly). Copyright 2010 Yahoo!, Inc., 9780596806750. "

Ответ 2

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

var x, y = x = 'value';

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

Ответ 3

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

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