while проверяет условие, которое является типом boolean со значениями true или false. При этом while продолжает крутить цикл пока это значение истинно. Если значение становится false, цикл прекращается. В JS false значение представлено в том числе нулём. Другими словами, когда while обращается к вычислению значения выражения i!=0, он получает false, т.е. 0, если i==0. В случае же обращения к i напрямую while получает false или 0 сразу как значение переменной i.