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

Объявление переменной в состоянии while в javascript

В сущности, я пытаюсь объявить переменную в условии-часть цикла while в javascript:

while (var b=a.pop()) {
  do_sth(b)
}

Тем не менее, мой браузер (firefox) не принимает этого. Вместо этого мне нужно идти так:

var b
while (b=a.pop()) {
  do_sth(b)
}

который работает. Ожидается ли такое поведение?

4b9b3361

Ответ 1

JavaScript не имеет области блока. Он имеет функцию. Поэтому, чтобы убедиться, что люди и JavaScript оба читают код одинаково, вы должны вручную поднять объявления var вплоть до верха функций.

Здесь JSLint говорит о вашем коде:

Problem at line 1 character 8: Expected an identifier and instead saw 'var'.

Используйте JSLint, по крайней мере, пока вы изучаете JavaScript. Вы узнаете много очень быстро. Это повредит вашим чувствам.

Ответ 2

Да, это так.

Если вы хотите, вы можете использовать цикл for, например:

for (var b; b = a.pop(); ) {      //Note the final semicolon
    do_sth(b);
}

Ответ 3

Вопрос немного устарел, но я думаю, что все ответы не имеют важного отличия. То есть, цикл while ожидает выражения, которые ожидают условного, то есть логического или значения, которое может быть преобразовано в логическое. Подробнее см. Документы Mozilla.

Чистое присваивание (без создания экземпляра) принудительно приводит к логическому значению через возвращаемое по умолчанию значение (значение правой стороны).

A var (или let или const) - это оператор, который допускает необязательное назначение, но имеет возвращаемое значение undefined.

Вы можете легко протестировать это в своей консоли:

var foo = 42; // undefined
bar = 42      // 42

Только возвращаемые значения не отвечают на вопрос, так как undefined является ложным, но показывает, что даже если JS позволяет помещать var в условное выражение, оно просто всегда будет оцениваться как false.

Другие упомянули операторы for и что они позволяют объявлять и создавать экземпляры переменных. Это верно, но документация

Ответ 4

JavaScript не имеет области блока. Таким образом, объявления var находятся в области функций. Поэтому объявление переменной в выражении while не имеет смысла в JavaScript.

Кроме того, вы должны заканчивать свои высказывания точкой с запятой. Это не строго необходимо, но настоятельно рекомендуется.