Ответ 1
Значение присваивания - это назначаемое значение, поэтому вы можете назначить назначения a = b = 2
, например, поэтому, когда b=0
, значение a=b
равно 0.
b=10;
while(a=b) {
b--;
if(b==-10)break;
}
B идет от 10 до -10. В моем мире утверждение while, a = b, всегда должно быть истинным (поскольку привязка всегда "идет хорошо" ). Это не относится к делу. Когда цикл остановится, b будет иметь значение 0.
В моем мире он должен пройти 0 и пройти весь путь до -10, когда выполняется if-statement.
Я неправильно понял что-то важное? (Код протестирован в IE8 и Adobe Acrobat)
Значение присваивания - это назначаемое значение, поэтому вы можете назначить назначения a = b = 2
, например, поэтому, когда b=0
, значение a=b
равно 0.
(0 = 0) == 0 == false
0
- значение false, 0 == false
- true, поэтому, как только b достигает 0, тогда a = b вычисляет значение false и цикл прерывается.
Простое исправление будет
while ((a=b) > -10) {
или в этом случае из-за оператора break;
вы можете просто использовать
while (true) {
Да, поскольку значение присваивания - это значение, которое присваивается выражению. Который равен 0, который вычисляется как false.
Очевидно, если (0) эквивалентно if (false).
Итак, если (a = b) истинно, только если b равно чему-то, что станет истинным, если бросить в boolean.
Итак, если говорят, что a и b - это один и тот же тип, он будет считаться истинным, если b отличен от нуля.
Что я не понимаю, почему этот код?
0 является ложным в javascript, a = b возвращает 0, когда b достигает 0, поэтому javascript читает false.
while-statement, a = b, всегда должен быть истинным (поскольку присвоение всегда "идет хорошо" ).
Как правило, не рекомендуется думать о возвращаемом значении в качестве подтверждения успеха операции. Продолжающееся выполнение вашего кода является признаком того, что присвоение прошло хорошо.
Примечательно, что ваша интуиция на самом деле назад из стандартного сценария оболочки Unix, где 0
означает A-OK!
, а ненулевой - другой результат.
Теперь, когда такие вещи, как Исключения, могут указывать на проблему при выполнении, для этого существуют более эффективные механизмы.
В то время как цикл ожидает условие i.e while (условие) и имеет дело с true or false
Поэтому ваш цикл выше переводит на while(a)
ergo условие для цикла - это значение a.
Когда a
достигает 0, ваш цикл прерывается.
Фактически 0 = 0 даст вам результат 0, который интерпретируется как false. Другими словами while (0 = 0) в значительной степени совпадает с while (0), который прерывает цикл.