Инкремент и декремент | Основы JavaScript
Для перемещения по курсу нужно зарегистрироваться
1. Введение ↳ теория
2. Hello, World! ↳ теория / тесты / упражнение
3. Инструкции ↳ теория / тесты / упражнение
4. Арифметические операции ↳ теория / тесты / упражнение
5. Ошибки оформления (синтаксиса и линтера) ↳ теория / тесты / упражнение
6. Строки ↳ теория / тесты / упражнение
7. Переменные ↳ теория / тесты / упражнение
8. Выражения в определениях ↳ теория / тесты / упражнение
9. Именование ↳ теория / тесты / упражнение
10. Интерполяция ↳ теория / тесты / упражнение
11. Извлечение символов из строки ↳ теория / тесты / упражнение
12. Типы данных ↳ теория / тесты / упражнение
13. Неизменяемость и примитивные типы ↳ теория / тесты / упражнение
14. Функции и их вызов ↳ теория / тесты / упражнение
15. Сигнатура функции ↳ теория / тесты / упражнение
16. Вызов функции — выражение ↳ теория / тесты / упражнение
17.
18. Детерминированность ↳ теория / тесты / упражнение
19. Стандартная библиотека ↳ теория / тесты / упражнение
20. Свойства и методы ↳ теория / тесты / упражнение
21. Цепочка вызовов ↳ теория / тесты / упражнение
22. Определение функций ↳ теория / тесты / упражнение
23. Возврат значений ↳ теория / тесты / упражнение
24. Параметры функций ↳ теория / тесты / упражнение
25. Необязательные параметры функций ↳ теория / тесты / упражнение
26. Упрощенный синтаксис функций ↳ теория / тесты / упражнение
27. Логика ↳ теория / тесты / упражнение
28. Логические операторы ↳ теория / тесты / упражнение
29. Результат логических операций ↳ теория / тесты / упражнение
30. Условные конструкции ↳ теория / тесты / упражнение
31. Тернарный оператор ↳ теория / тесты / упражнение
32. Конструкция Switch ↳ теория / тесты / упражнение
33. Цикл while ↳ теория / тесты / упражнение
34. Агрегация данных
↳
теория
/
тесты
/
упражнение
35. Обход строк в цикле ↳ теория / тесты / упражнение
36. Условия внутри тела цикла ↳ теория / тесты / упражнение
37. Инкремент и декремент ↳ теория / тесты / упражнение
38. Цикл for ↳ теория / тесты / упражнение
39. Модули ↳ теория / тесты / упражнение
Испытания
1. Фибоначчи
2. Найди Fizz и Buzz
3. Переворот числа
4. Счастливый билет
5. Фасад
6. Идеальные числа
7. Инвертированный регистр
8. Счастливые числа
Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как
Не понятна формулировка, нашли опечатку?
Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку
Что-то не получается в уроке?
Загляните в раздел «Обсуждение»:
- Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
- Если вопросы остались, задайте свой.
Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
- Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!
Подробнее о том, как задавать вопросы по уроку
Инкремент и декремент в JavaScript — ВебКадеми
Главная » JavaScript
JavaScript
На чтение 2 мин Просмотров 2.6к. Опубликовано
Частой операцией в JS является увеличение или уменьшение числа на 1. Для этого есть специальные операторы ++
и --
. В этой статье разберемся с тем как они работают, если указать оператор до переменной или после неё.
Есть разница в том пишем мы --
или ++
до переменной, или после.
- Когда оператор расположен перед переменной
++i
, это называется префиксной формой. - Расположение оператора после переменной
i++
, называется постфиксной формой.
Содержание
- Оператор перед переменной ++i
- Оператор после переменной i++
- Пример с присвоением значения в другую переменную
Оператор перед переменной
++i
Если указать оператор перед переменной
var a = 10; console.log (++a) // 11 var b = 10; console.log (--b) // 9
Оператор после переменной
i++
Если операнд указать после переменной, то тогда сначала будет возвращено текущее значение переменной, и только после этого произойдет вычисление.
var a = 10; console.log (a++) // 10 console.log (a) // 11 var b = 10; console.log (b--) // 10 console.log (b) // 9
Пример с присвоением значения в другую переменную
Также стоит быть внимательным при вычислении и записи результата в другие переменные.
// Префиксная форма var a = 10; var b = ++a; // "a" увеличилась на 1, и после было возвращено значение console.log (a) // 11 console.log (b) // 11 // Постфиксная форма var a = 10; var b = a++; // сначала было возвращено текущее значение "a", и только после произошло ее увеличение на 1 console.log (a) // 11 console.log (b) // 10
Оцените автора
Плавильный котел JavaScript — Инкремент: разработка
Люди, с которыми я разговаривал, испытывают смешанные чувства по поводу экосистемы JavaScript.
Некоторые из них выражают свою усталость от JavaScript. Другие утверждают, что мы живем в эпоху Ренессанса JavaScript.
Некоторые насмехаются над тем, что это не настоящий язык. Другие отмечают, что это первый основной язык, в котором случайные пользователи предоставляют разработчикам языка информацию о реальном использовании до того, как будут реализованы функции.
Некоторые рассматривают JavaScript как цель компиляции, в то время как другие формируют субкультуры вокруг определенных способов его написания. И он работает везде: на вашем ноутбуке, в вашем телефоне, на сервере и вскоре, возможно, в вашем холодильнике.
Экосистема JavaScript, не ограниченная одним поставщиком, точно отражает человеческую культуру. Он изобретателен, постепенен, хаотичен, поглощает все на своем пути и вездесущ.
Скажу честно: я люблю плавильный котел JavaScript. И хотя нельзя отрицать, что новичкам сейчас труднее разобраться в этом, чем мне пять лет назад, я считаю, что есть несколько вещей, которые мы можем сделать, чтобы сделать его более доступным.
Но сначала давайте посмотрим, как сложилась экосистема JavaScript.
Появление дикой цепочки инструментов
Традиционно программные платформы выращивались корпоративными привратниками, которые осознавали важность привлечения сторонних разработчиков. Такие компании, как Apple и Microsoft, предоставили язык, компилятор и набор SDK для своей платформы.
Обычно был один предпочтительный способ общения с базой данных, один способ отрисовки пользовательского интерфейса, один способ использования сети. При желании можно было выйти за пределы мощеной дорожки, но там было холодно и одиноко. Это принесло стабильность, но задушило инновации.
Сеть изменила это. В то время как комитеты по стандартизации годами спорили о будущем ориентированного на документы веба, разработчики поняли, что преимущества кросс-платформенного механизма доставки для многофункциональных интерактивных приложений стоят усилий по их созданию без SDK, модульной системы, библиотеки или компилятор. В конце концов, они могли написать свое собственное. И они это сделали.
Инновации в движках JavaScript для браузеров сделали возможным создание многофункциональных клиентских веб-приложений. Node.js полагался на эти инновации для запуска JavaScript на сервере и стал пионером в модульной системе JavaScript. Клиентские приложения также остро нуждались в модульной системе. Появились и начали набирать популярность инструменты, реализующие аналогичный API модуля для клиентских приложений.
Серверная и клиентская экосистемы JavaScript продолжали обогащать друг друга. Многие модули, которыми люди хотели поделиться, были независимы от среды, поэтому оба сообщества в конечном итоге сошлись на использовании экосистемы пакетов Node. Над этим часто шутят, но дело в том, что реестр npm — это крупнейшая платформа для обмена кодами в истории человечества.
Инструменты, компенсирующие отсутствие «официального» JavaScript SDK, часто создавались небольшими и независимыми сообществами разработчиков. Их авторы были разработчиками приложений, которые решили изучить синтаксические анализаторы, манипулирование исходным кодом, статический анализ, оптимизацию и другие темы, которые традиционно были прерогативой ученых и поставщиков SDK поставщиков.
Создание инструментов стало более распространенным в JavaScript, чем в других сообществах, частью которых я был. Было ощущение, что быть любителем нормально, потому что большинство людей были любителями. Как только вы освоитесь с созданием приложений, вы можете начать создавать инструменты для себя и других. Вам не нужно было быть инженером-компилятором, чтобы внести свой вклад в Babel.
Помогло то, что модули JavaScript распространяются в виде исходного кода, так что вы всегда можете заглянуть под капот. Поскольку npm размещает зависимости прямо в каталоге вашего проекта, вы всегда на расстоянии одного клика от кода, который запускает ваше приложение. Мне казалось, что установка кода делает этот код моей обязанностью. Я мог помочь исправить ошибки и улучшить инструменты, на которые я полагался.
И все же…
Айсберг зависимостей
Сегодня перспектива изучения зависимостей пугает многих разработчиков. В типичном проекте JavaScript их так много! А поскольку npm теперь сглаживает их, вы сразу же подвергаетесь воздействию всех транзитивных зависимостей.
Я думаю, что это может быть здорово, так как полагаться на незнакомцев не бесплатно. Мы должны найти устойчивый способ поддержки проектов с открытым исходным кодом. Нынешняя модель неоплачиваемых волонтеров, поддерживающих инфраструктуру, используемую ведущими компаниями, не выдерживает критики. Ваш 9Папка 0043 node_modules – это реализация, которая смотрит вам прямо в лицо.
Webpack и Vue доказывают, что некоторые популярные проекты могут достичь своих целей по финансированию, но для этого требуется много усилий. Важные низкоуровневые проекты с меньшим маркетинговым блеском не могут конкурировать с этим. У меня нет ответа на этот вопрос, но я призываю вас поддерживать проекты, на которые вы рассчитываете, будь то деньгами, вкладом в код или документацию или такими действиями, как сортировка проблем.
Однако меня больше всего беспокоит инструментарий JavaScript не из-за количества кода, на который мы полагаемся. Код, который не является необходимым, может быть удален, пакеты заменены, а полифилы удалены, когда эквивалентные функции появятся в наших средах выполнения. Мы можем подтянуть ненужные абстракции.
Некоторые люди говорят, что все инструменты сборки не нужны и должны быть выброшены из окна по мере развития браузеров, но я не могу с этим согласиться. Я рад иметь синтаксический анализатор JavaScript в моих зависимостях времени сборки, потому что он поддерживает инструмент статического анализа, который находит ошибки в моем приложении. И хотя некоторые старые инструменты изживают себя, новые инструменты, повышающие мою продуктивность, заполняют этот пробел.
Так что нет, меня беспокоит не сам айсберг зависимостей.
Это увеличение количества параметров конфигурации.
Наши инструменты делают меня толстым
Как производители инструментов, мы склонны делать все настраиваемым. Каждый запрос функции GitHub говорит нам, что если мы добавим эту крошечную опцию, этот человек сможет использовать наш инструмент! И поэтому мы продолжаем добавлять эти параметры, пока конфигурация не станет настолько сложной, что о ней будут писать книги.
Некоторые инструменты пытаются предложить ту же гибкость, избегая настройки. Они придерживаются философии Unix: это простые программы, предназначенные для объединения в цепочку. Однако, по моему опыту, порядок и способ их соединения имеют решающее значение. Вместо того, чтобы изучать формат конфигурации, вы должны изучить их внутренности или, что более вероятно, как обойти их с помощью хаков. А поскольку наверху нет абстракции, ничто не подскажет вам, где вы напортачили, если допустили ошибку.
Кэти Сьерра четыре года назад написала потрясающий пост под названием «Ваше приложение делает меня толстой». Я не могу перестать думать об этом. Вы обязательно должны прочитать это, но вот часть, которая поражает меня:
Если ваш UX попросит пользователя сделать выбора , например, даже если эти варианты ясны и полезны, действие принятия решения – это когнитивное истощение. И не только , пока решают. … Даже после , которые мы выбираем, бессознательный когнитивный фоновый поток медленно потребляет/утекает ресурсы: «Было , что — правильный выбор?» … Если наша работа истощает когнитивные ресурсы пользователя, что он теряет? Что еще он мог сделать с этими скудными, драгоценными, быстро истощаемыми ресурсами? Может быть, он пытается придерживаться этой диеты. Или заниматься на гитаре. Или поиграть с его детьми.
Как производители инструментов, мы часто не осознаем эту цену.
Всякий раз, когда мы добавляем флаг конфигурации, полезный для пяти процентов наших пользователей, мы должны учитывать его более широкое значение для человека. Стоит ли это когнитивного истощения, которое оно создает для 95 процентов? Как насчет тех пяти процентов, которым он должен был помочь, если они забудут, что он делает, или усомнятся в своем решении?
Лишит ли это людей возможности выбора? Можем ли мы приложить дополнительные усилия, чтобы сделать вариант по умолчанию достаточно удобным для всех? Если нам нужно добавить конфигурацию, можем ли мы раскрывать ее постепенно, чтобы пользователи не видели ее, пока они не будут готовы? Поймут ли они это или сдадутся и научатся копировать и вставлять случайные варианты, пока что-то не заработает?
Если вы, как и я, работаете над инструментами JavaScript, вы являетесь привратником крупнейшего в мире сообщества программистов. Это страшно. Когда мы лажаем и печатаем непонятное сообщение об ошибке, кто-то где-то решает, что он не создан для программирования. Когда они не могут правильно настроить проект, мы теряем их, даже не начав.
Есть несколько стратегий, которым мы можем следовать, чтобы сделать инструменты JavaScript более удобными. Ни одна из этих идей не является новой, но я считаю, что они постоянно недостаточно применяются в экосистеме JavaScript. Такие проекты, как Ember и Elm, понимают это правильно, и мы все можем у них поучиться. Вот мое мнение о том, чего не хватает.
Настройка не должна мешать началу работы
Инструмент должен работать (почти) без настройки. Обычно можно выбрать разумные значения по умолчанию для подавляющего большинства параметров. Если сразу очевидного значения по умолчанию нет, вы можете прибегнуть либо к эвристике, либо к соглашению, либо к сочетанию того и другого, если вы предлагаете пользователю какой-то способ узнать, что происходит.
Если вы чувствуете противоречие, не бойтесь делать произвольный выбор и придерживайтесь его. Если это действительно не имеет значения, это лучше, чем перекладывать эту ответственность на новичка. Это также может снизить умственные затраты на переключение между проектами, поскольку они часто используют одни и те же настройки по умолчанию.
Не добавляйте больше конфигурации, чем это абсолютно необходимо
Если это вопрос вашего мнения, не бойтесь занимать жесткую позицию по некоторым вопросам, по крайней мере, некоторое время. Если вы знаете, что большая часть потенциальных пользователей никогда не воспользуется вашим инструментом из-за необходимости настройки, вы можете в конечном итоге ослабить ограничения, но не сдавайтесь сразу.
Имейте в виду, что конфигурация добавляет когнитивную нагрузку не только в жизнь ваших пользователей, но и в вашу. Каждая новая опция экспоненциально увеличивает потенциальную поверхность ошибки. Именно так проекты превращаются из стабильных в хрупкие и полные ошибок. И гораздо лучше, чтобы кто-то взял на вооружение конкурирующий проект, чем чтобы ты тушил пожары в своем.
Постепенное раскрытие расширенных функций
Если для работы какой-либо функции требуется параметр конфигурации, вы можете отложить запрос об этом до тех пор, пока пользователь не попытается использовать эту функцию. Это делает кривую обучения менее крутой и помогает им понять, почему этот параметр необходим и к какой функции он относится.
Следите за выводом
Когда вы проводите месяцы, наблюдая за выводом вашего инструмента, вы знаете, какие части имеют смысл, но новый пользователь этого не знает. Их глазные яблоки нервно просматривают сообщения об ошибках, не находя той части, которая имеет отношение к их исправлению. Напечатайте достаточно шумных предупреждений или ошибок, которые нельзя принять, и вы навсегда потеряете их доверие.
Существует множество способов улучшить результаты работы инструмента: печатать только полезную информацию, помогать пользователям находить ошибки, избегать профессионального жаргона, использовать пробелы и цвета там, где это уместно, и не забывать о специальных возможностях.
Создание многоразовых наборов инструментов
Если вы часто начинаете проекты, клонируя свой последний проект, потому что написание файлов конфигурации и настройка инструментов сборки слишком сложны, возможно, вы работаете на неправильном уровне абстракции. Вместо того, чтобы напрямую использовать несколько инструментов более низкого уровня, подумайте о том, чтобы объединить их в «набор инструментов» более высокого уровня, который вы можете использовать в разных проектах.
Да, я действительно предлагаю решить проблему слишком большого количества инструментов с помощью другого инструмента. Это не шутка. Выслушай меня. Я думаю, это работает, потому что мы ограничиваем поверхность конфигурации, а не расширяем ее.
Наборы инструментов, а не шаблоны
Вместо того, чтобы поддерживать конфигурацию и зависимости сборки в каждом проекте, вы можете создать единый пакет «набора инструментов», который предоставляет кураторские возможности поверх инструментов, которые вы уже используете.
Мы используем этот подход в Create React App. Многие думают, что это шаблонный генератор, но это немного другое. Несмотря на то, что он создает проект со сборщиком, линтером и средством запуска тестов, он прячет их за одним пакетом, который мы поддерживаем, и он работает из коробки без настройки. Это помогает нам гарантировать, что инструменты хорошо работают вместе, их версии всегда совместимы, и нашим пользователям не нужно ничего настраивать, чтобы начать работу.
Когда выходят новые версии базовых инструментов, мы обновляем их на своей стороне, при необходимости корректируем конфигурацию и выпускаем обновление для нашей общей зависимости, до которого каждый может обновиться с помощью одной команды. Я слышал от нескольких людей, что, хотя они и не используют приложение Create React как таковое, они приняли аналогичную стратегию в своих компаниях, централизовав интерфейсные инструменты в одном пакете.
Конечно, некоторые проекты действительно нуждаются в конфигурации для конкретного проекта. В приложении Create React мы решаем эту проблему с помощью подхода под названием «извлечение», впервые предложенного Enclave. Если вы запустите команду «eject», файлы конфигурации и базовые зависимости сборки будут скопированы непосредственно в ваш проект. Теперь вы можете настраивать все, что хотите, но вы не получаете обновлений основной ветки разработки, так как вы, по сути, разветвили инструментальную среду в своем проекте. У извлечения есть свои недостатки, но оно позволяет вам выбрать, хотите ли вы сохранить собственные настройки инструментов для каждого проекта или нет.
Я считаю многоразовые наборы инструментов интересным способом сделать инструменты JavaScript доступными. Они добавляют некоторую неудачную косвенность, но они также предлагают мощный способ переосмыслить то, как наши инструменты могут работать вместе, если мы структурируем сплоченный опыт с намерением, а не оставляем его на волю случая.
Конечно, это не означает, что мы должны перестать делать низкоуровневые инструменты более удобными для пользователя. Мы можем улучшить экосистему одновременно снизу вверх и сверху вниз.
Вы можете помочь
Даже если вы не считаете себя производителем инструментов, я призываю вас подумать об этих стратегиях и о том, как их можно применить к проектам, которые вы используете. Есть ли сообщение об ошибке, которое слишком неясно? В параметре конфигурации отсутствует нормальное значение по умолчанию? Предложение в документации, которое вы могли бы улучшить? Отсутствует инструмент более высокого уровня?
Если проект принимает проблемы, вы можете зарегистрировать проблему и описать свое предложение или просто отправить запрос на вытягивание. Как сопровождающие, мы часто забываем о проблемах удобства использования в наших проектах, потому что тратим на них слишком много времени.
Если вы занимаетесь сопровождением, подумайте о том, чтобы стать волонтером в такой инициативе, как Codebar. Поговорите с новичками, посмотрите, как они используют ваши инструменты и где они спотыкаются. Усилия, которые вы прикладываете к опыту новичка, могут реально изменить жизнь людей.
Если вы недавно столкнулись с проблемой, связанной с инструментами JavaScript, путь вперед может показаться пугающим. Но я видел, как проекты разворачивались на 180 градусов, превращаясь из кошмаров юзабилити в восхитительные инструменты всего за несколько месяцев.
Благодаря высококачественным отзывам и постепенным улучшениям сегодня мы можем сделать инструменты JavaScript более доступными для тех, кто попробует их завтра.
Мне не терпится увидеть, что они из этого сделают.
Оператор JavaScript: Инкремент (`++`) | Могу ли я использовать.
![](/800/600/https/miro.medium.com/max/4728/1*N5-MO8brg0_A7mOCfSSptA.png)
Могу ли я использовать
Поиск?
Оператор JavaScript: приращение (`++`)
Глобальное использование
97,58% + 0% «=» 97,58%
IE
- 6–10: поддерживается
- 11: поддерживается
Edge
- 12–112: поддерживается
- 11 3: Поддерживается
Firefox
- 2 — 112: Поддерживается
- 113: Поддерживается
- 114–115: Поддерживается
Хром
- 4–112: Поддерживается 02% — Supported»> 113: Поддерживается
- 114–116: Поддерживается
Safari
- 3.1–3.2: Не поддерживается
- 4–16.3: Поддерживается 9 0211 16.4: Поддерживается
- 16.5 — TP: Поддерживается
Opera
- 10–97: Поддерживается
- 98: Поддерживается
Safari на iOS
- 3.2–16.3: Поддерживается
- 16.4: Поддерживается
- 16. 5: поддерживается
Opera Mini
- все: Поддержка неизвестна