Несколько левое присвоение с JavaScript

Другая проблема, с которой я встретился (который определяется, но определенно неожиданный).

символ является злым.

  • подписанный или неподписанный в зависимости от того, что компилятор чувствует себя
  • не переданным под мандат как 8 битов
180
задан David Calhoun 18 November 2009 в 09:48
поделиться

3 ответа

Фактически,

var var1 = 1, var2 = 1, var3 = 1;

не эквивалентно:

var var1 = var2 = var3 = 1;

Разница в области видимости:

 function good () {var1 = 1, var2 = 1, var3 = 1; } функция bad () {var var1 = var2 = var3 = 1; } хороший(); console.log (window.var2); // undefined bad (); console.log (window.var2); // 1. Aggh! 

Фактически это показывает, что присваивания являются правоассоциативными. Пример bad эквивалентен:

var var1 = (window.var2 = (window.var3 = 1));
389
ответ дан 23 November 2019 в 06:12
поделиться

Назначение в javascript работает справа налево. var var1 = var2 = var3 = 1; .

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

Его можно рассматривать как эквивалент var var1 = (var2 = (var3 = 1)); , где в первую очередь оценивается самый внутренний набор скобок.

18
ответ дан 23 November 2019 в 06:12
поделиться

Попробуйте следующее:

var var1=42;
var var2;

alert(var2 = var1); //show result of assignment expression is assigned value
alert(var2); // show assignment did occur.

Обратите внимание на одиночный знак '=' в первом предупреждении. Это покажет, что результатом выражения присваивания является присвоенное значение, а второе предупреждение покажет вам, что присвоение действительно произошло.

Из этого логически следует, что присваивание должно быть выполнено справа налево. Однако, поскольку это все атомарно для javascript (там '

4
ответ дан 23 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: