Основы javascript
Содержание:
- Как устроен JavaScript
- Полезные инструменты
- Операторы
- Основы
- Первый тест
- Внешние переменные
- JS Уроки
- Таблицы совместимости
- Изучаем программирование на JavaScript
- Участники
- Приоритет операторов
- Бэкенд
- Выбор имени функции
- Переменные
- Параметры или аргументы label_name
- Возврат значения
- Подбери подходящий онлайн курс для изучения JavaScript с нуля
- Базовые знания
- Не бойся практиковаться
- Абстрактный класс и интерфейс
- ИЛИ «||» находит первое истинное значение
- Итого
Как устроен JavaScript
Дуглас Крокфорд
«Как устроен JavaScript»
Дуглас Крокфорд — известный специалист в мире JavaScript. Он рассказывает, как язык устроен «под капотом». Книга не учит программированию, а объясняет нюансы языка, поэтому рекомендуем тем, кто осилил Кайла Симпсона — это логическое продолжение его работ.
Вот неполный список вопросов, на которые отвечает книга:
- Как устроены объекты
- Почему ООП в JavaScript реализовано именно так
- Как работают генераторы
- Зачем нужен и как используется оператор this
- Как JavaScript работает с числами.
Если книга не учит программировать, то зачем её читать разработчикам? Чтобы лучше понимать, как работает основной инструмент — язык программирования, а заодно подготовиться к очередному собеседованию.
Отдельного внимания заслуживает глава про Wat. Это краткий обзор одноимённого доклада и разбор примеров, которые могут ввести в ступор даже опытных разработчиков.
Полезные инструменты
Консоль разработчика
Во всех популярных браузерах есть специальная консоль разработчика. Она показывает код скриптов на странице, а также выводит другую полезную информацию. В Chrome, Firefox и IE консоль разработчика открывается по нажатию горячей клавиши F12, в Safari — Ctrl+Shift+I или Ctrl+Alt+C. На скриншоте скрипты отображаются справа вверху, вместе с другими элементами веб-страницы.
Консоль разработчика в Chrome.
Редакторы кода
В дальнейшем для удобного программирования понадобится установить редактор кода или IDE (Integrated Development Environment), интегрированную среду разработки. IDE — это редактор с расширенной функциональностью, который интегрирован с другими полезными инструментами, поддерживает подключение дополнительных модулей и так далее.
Для начала можно рекомендовать один из легких редакторов:
- Sublime Text;
- Atom;
- SciTe;
- Notepad++.
В будущем есть смысл присмотреться к IDE:
- IntelliJ WebStorm;
- Visual Studio.
Операторы
JavaScript поддерживает следующие операторы:
- Арифметические
-
Простые , а также деление по модулю и возведение в степень .
Бинарный плюс объединяет строки. А если одним из операндов является строка, то второй тоже будет конвертирован в строку:
- Операторы присваивания
-
Простые и составные .
- Битовые операции
-
Битовые операторы работают с 32-битными целыми числами на самом низком, побитовом уровне. Подробнее об их использовании можно прочитать на ресурсе MDN и в разделе Побитовые операторы.
- Условный оператор
-
Единственный оператор с тремя параметрами: . Если условие истинно, возвращается , иначе – .
- Логические операторы
-
Логические И , ИЛИ используют так называемое «ленивое вычисление» и возвращают значение, на котором оно остановилось (не обязательно или ). Логическое НЕ конвертирует операнд в логический тип и возвращает инвертированное значение.
- Сравнение
-
Проверка на равенство значений разных типов конвертирует их в число (за исключением и , которые могут равняться только друг другу), так что примеры ниже равны:
Другие операторы сравнения тоже конвертируют значения разных типов в числовой тип.
Оператор строгого равенства не выполняет конвертирования: разные типы для него всегда означают разные значения.
Значения и особенные: они равны только друг другу, но не равны ничему ещё.
Операторы сравнения больше/меньше сравнивают строки посимвольно, остальные типы конвертируются в число.
- Другие операторы
-
Существуют и другие операторы, такие как запятая.
Подробности: Базовые операторы, математика, Операторы сравнения, Логические операторы.
Основы
Сперва необходимо изучить основные понятия JavaScript, веб-разработки и программирования в целом:
- объектно-ориентированный JS — конструкторы и фабрики, наследование;
- функциональный JS — функции высшего порядка, замыкания, рекурсия;
- спецификации тестов Jasmine;
- основы HTML, CSS и jQuery.
Git
Git — необходимый разработчикам инструмент, поэтому познакомиться с ним нужно как можно раньше. Вот основные навыки, которыми вы должны обладать:
- создание и перемещение файлов в каталогах;
- инициализация и коммиты в Git;
- настройка репозиториев в GitHub.
Алгоритмы и структуры данных
Затем стоит изучить алгоритмы (в частности, понятие сложности алгоритмов), а также базовые структуры данных: связные списки, очереди, стеки, двоичные деревья поиска и хэш-таблицы. В этом вам поможет наша серия статей.
Первый тест
testtest()it()it()test()expect()Math.max(1, 5, 10)expect()toBe
- toBe() — подходит, если нам надо сравнивать примитивные значения или является ли переданное значение ссылкой на тот же объект, что указан как ожидаемое значение. Сравниваются значения при помощи Object.is(). В отличие от === это дает возможность отличать 0 от -0, проверить равенство NaN c NaN.
- toEqual() — подойдёт, если нам необходимо сравнить структуру более сложных типов. Он сравнит все поля переданного объекта с ожидаемым. Проверит каждый элемент массива. И сделает это рекурсивно по всей вложенности.
- toContain() — проверят содержит массив или итерируемый объект значение. Для сравнения используется оператор ===.
- toContainEqual() — проверяет или содержит массив элемент с ожидаемой структурой.
- toHaveLength() — проверяет или свойство length у объекта соответствует ожидаемому.
- toBeNull() — проверяет на равенство с null.
- toBeUndefined() — проверяет на равенство с undefined.
- toBeDefined() — противоположность toBeUndefined. Проверяет или значение !== undefined.
- toBeTruthy() — проверяет или в булевом контексте значение соответствует true. Тоесть любые значения кроме false, null, undefined, 0, NaN и пустых строк.
- toBeFalsy() — противоположность toBeTruthy(). Проверяет или в булевом контексте значение соответствует false.
- toBeGreaterThan() и toBeGreaterThanOrEqual() — первый метод проверяет или переданное числовое значение больше, чем ожидаемое >, второй проверяет больше или равно ожидаемому >=.
- toBeLessThan() и toBeLessThanOrEqual() — противоположность toBeGreaterThan() и toBeGreaterThanOrEqual()
- toBeCloseTo() — удобно использовать для чисел с плавающей запятой, когда вам не важна точность и вы не хотите, чтобы тест зависел от незначительной разницы в дроби. Вторым аргументом можно передать до какого знака после запятой необходима точность при сравнении.
- toMatch() — проверяет соответствие строки регулярному выражению.
- toThrow() — используется в случаях, когда надо проверить исключение. Можно проверить как сам факт ошибки, так и проверить на выброс исключения определенного класса, либо по сообщению ошибки, либо по соответствию сообщения регулярному выражению.
- not — это свойство позволяет сделать проверки на НЕравенство. Оно предоставляет объект, который имеет все методы перечисленные выше, но работать они будут наоборот.
areacircumferencetoBeCloseTotoBeNaN
byRangePricetoContainEqualtoContainEqualtoEqualtoBeGreaterThanOrEqualtoBeLessThanOrEqualnot.toContainEqual
Внешние переменные
У функции есть доступ к внешним переменным, например:
Функция обладает полным доступом к внешним переменным и может изменять их значение.
Например:
Внешняя переменная используется, только если внутри функции нет такой локальной.
Если одноимённая переменная объявляется внутри функции, тогда она перекрывает внешнюю. Например, в коде ниже функция использует локальную переменную . Внешняя будет проигнорирована:
Глобальные переменные
Переменные, объявленные снаружи всех функций, такие как внешняя переменная в вышеприведённом коде – называются глобальными.
Глобальные переменные видимы для любой функции (если только их не перекрывают одноимённые локальные переменные).
Желательно сводить использование глобальных переменных к минимуму. В современном коде обычно мало или совсем нет глобальных переменных. Хотя они иногда полезны для хранения важнейших «общепроектовых» данных.
JS Уроки
JS HOMEJS IntroductionJS Where ToJS OutputJS StatementsJS SyntaxJS CommentsJS VariablesJS OperatorsJS ArithmeticJS AssignmentJS Data TypesJS FunctionsJS ObjectsJS ScopeJS EventsJS StringsJS String MethodsJS NumbersJS Number MethodsJS ArraysJS Array MethodsJS Array SortJS Array IterationJS DatesJS Date FormatsJS Date Get MethodsJS Date Set MethodsJS MathJS RandomJS BooleansJS ComparisonsJS ConditionsJS SwitchJS Loop ForJS Loop WhileJS BreakJS Type ConversionJS BitwiseJS RegExpJS ErrorsJS DebuggingJS HoistingJS Strict ModeJS this KeywordJS Style GuideJS Best PracticesJS MistakesJS PerformanceJS Reserved WordsJS VersionsJS Version ES5JS Version ES6JS JSON
Таблицы совместимости
JavaScript – это развивающийся язык, в который постоянно добавляется что-то новое.
Посмотреть, какие возможности поддерживаются в разных браузерах и других движках, можно в следующих источниках:
- http://caniuse.com – таблицы с информацией о поддержке по каждой возможности языка. Например, чтобы узнать, какие движки поддерживают современные криптографические функции, посетите: .
- https://kangax.github.io/compat-table – таблица с возможностями языка и движками, которые их поддерживают и не поддерживают.
Все эти ресурсы полезны в ежедневной работе программиста, так как они содержат ценную информацию о возможностях использования языка, их поддержке и так далее.
Пожалуйста, запомните эти ссылки (или ссылку на эту страницу) на случай, когда вам понадобится подробная информация о какой-нибудь конкретной возможности JavaScript.
Изучаем программирование на JavaScript
Эрик Фримен, Элизабет Робсон
«Изучаем программирование на JavaScript»
Если вы начинаете путь в разработке, и пока для вас программирование больше похоже на магию — присмотритесь к этой книге. Она познакомит вас с одним из самых популярных языков программирования — JavaScript. Основная её особенность — повествование в стиле комиксов. Обучение строится через иллюстрации и многочисленные рассуждения в виде прямой речи героев.
Основной упор авторы делают на подачу материала. Они не просто описывают возможности языка, как это принято в традиционных книгах, а наталкивают читателя на проблемы и их решения. Несмотря на большой объём, книга читается на одном дыхании. Вы разберётесь с основами языка, напишете несколько простых приложений и подготовитесь к чтению более серьёзной литературы.
Участники
Список ниже включает всех участников-авторов 10+ строк учебника. Более полный список участников есть в GitHub.
Чтобы войти в этот список, напишите статью или пришлите исправления в учебник через PR в репозиторий.
Участник | Строк | В процентах |
---|---|---|
Ilya Kantor |
51576 | 71.62% |
xcurveballx |
2164 | 3.00% |
kichik |
1653 | 2.30% |
Alexey Pyltsyn |
1431 | 1.99% |
Dmitry G. Anderson |
1428 | 1.98% |
vadim.pimonenkov |
867 | 1.20% |
Khimtsov Anton Igorevich |
573 | 0.80% |
Daniil Stepanov |
537 | 0.75% |
alfill |
477 | 0.66% |
MrShtein |
469 | 0.65% |
Nikita Glazov |
409 | 0.57% |
Roman Konkin |
386 | 0.54% |
Alexander Shchegol |
366 | 0.51% |
webben |
363 | 0.50% |
ksimanov |
335 | 0.47% |
Metre-Ray |
324 | 0.45% |
Anton Kolesnikov |
288 | 0.40% |
smyagkov |
285 | 0.40% |
aruseni |
280 | 0.39% |
Vse Mozhe Buty |
279 | 0.39% |
rutigl |
262 | 0.36% |
Stanislav Dolgachov |
261 | 0.36% |
egorzot |
260 | 0.36% |
Aleksey Sereda |
233 | 0.32% |
phrixothrixa |
218 | 0.30% |
Anna Tuzova |
217 | 0.30% |
Mykhaliuk Vladimir |
212 | 0.29% |
Daria Serova |
211 | 0.29% |
Timur |
208 | 0.29% |
hisbvdis |
200 | 0.28% |
Alexander Ivanov |
190 | 0.26% |
Andrew Buter |
185 | 0.26% |
root |
184 | 0.26% |
Vladimir Yurchenko |
182 | 0.25% |
dima |
181 | 0.25% |
h_type |
163 | 0.23% |
Oleksandr Onufrienko |
157 | 0.22% |
Kirill255 |
155 | 0.22% |
throwable |
137 | 0.19% |
Konstantin Alikhanov |
122 | 0.17% |
Alexander |
114 | 0.16% |
Alfiya |
112 | 0.16% |
Sergey |
110 | 0.15% |
Tani-Tani |
109 | 0.15% |
perepichai |
101 | 0.14% |
Nick S |
93 | 0.13% |
Kirill |
92 | 0.13% |
Daniil Kiyanov |
88 | 0.12% |
Andrey Barkalov |
83 | 0.12% |
Sergey Vakhrameev |
81 | 0.11% |
HomeDAN |
78 | 0.11% |
Siarhei Pakhuta |
78 | 0.11% |
Tagir |
76 | 0.11% |
EnchantressSam |
74 | 0.10% |
Denis Popov |
72 | 0.10% |
Brent Guffens |
70 | 0.10% |
Mikhail V. Null |
68 | 0.09% |
Anton Frolovsky |
66 | 0.09% |
Albert Abdulmanov |
66 | 0.09% |
emiklyaev |
66 | 0.09% |
Yaroslav Smirnov |
64 | 0.09% |
Zulcom |
59 | 0.08% |
Anton Loyko |
59 | 0.08% |
romaldowoho |
53 | 0.07% |
Sasha Sushko |
52 | 0.07% |
Minira Samadova |
52 | 0.07% |
mikuhann |
52 | 0.07% |
Alexey Onikov |
51 | 0.07% |
Vladimir Troyanenko |
50 | 0.07% |
masterov |
47 | 0.07% |
Danil Kolumbet |
47 | 0.07% |
adsurov |
43 | 0.06% |
Tanya Ten |
41 | 0.06% |
Dmitry Lebedev |
40 | 0.06% |
decorator-factory |
39 | 0.05% |
anastasiaeremina |
38 | 0.05% |
Simon Bliznyuk |
37 | 0.05% |
Anton Yershov |
35 | 0.05% |
eidolonzx |
34 | 0.05% |
Igor Kazakov |
33 | 0.05% |
Alexey Zakhlestin |
32 | 0.04% |
juliastetskaya |
31 | 0.04% |
Yesset |
30 | 0.04% |
webistomin |
30 | 0.04% |
Denis Blazhkun |
30 | 0.04% |
Maxim P |
30 | 0.04% |
Alexey Smolyakov |
29 | 0.04% |
Steamhammer |
26 | 0.04% |
simmayor |
26 | 0.04% |
Иван Багаев |
24 | 0.03% |
Sovgut Sergey |
24 | 0.03% |
bedrosenator |
23 | 0.03% |
Rinat Akhunyanov |
23 | 0.03% |
Mau Di Bert |
21 | 0.03% |
11un |
16 | 0.02% |
Paul |
16 | 0.02% |
Alexander Ogilvie |
15 | 0.02% |
IgorKennyPavlov |
14 | 0.02% |
Terr1bus |
13 | 0.02% |
Mojtaba Javan |
12 | 0.02% |
Alex Shakun |
12 | 0.02% |
Евгений Сергеевич Михайлов |
12 | 0.02% |
Prokhor |
10 | 0.01% |
Екатерина Пугачева |
10 | 0.01% |
Показать всех ▾
Приоритет операторов
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется приоритетом, или, другими словами, существует определённый порядок выполнения операторов.
Из школы мы знаем, что умножение в выражении выполнится раньше сложения. Это как раз и есть «приоритет». Говорят, что умножение имеет более высокий приоритет, чем сложение.
Скобки важнее, чем приоритет, так что, если мы не удовлетворены порядком по умолчанию, мы можем использовать их, чтобы изменить приоритет. Например, написать .
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше, – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
Отрывок из таблицы приоритетов (нет необходимости всё запоминать, обратите внимание, что приоритет унарных операторов выше, чем соответствующих бинарных):
Приоритет | Название | Обозначение |
---|---|---|
… | … | … |
17 | унарный плюс | |
17 | унарный минус | |
16 | возведение в степень | |
15 | умножение | |
15 | деление | |
13 | сложение | |
13 | вычитание | |
… | … | … |
3 | присваивание | |
… | … | … |
Так как «унарный плюс» имеет приоритет , который выше, чем у «сложения» (бинарный плюс), то в выражении сначала выполнятся унарные плюсы, а затем сложение.
Бэкенд
Node.js
10 лет назад JavaScript можно было использовать только для фронтенд-разработки. Теперь благодаря Node.js одним «фронтом» дело не ограничивается. Node — это просто среда для выполнения JS-кода на стороне сервера, поэтому вам не придётся изучать новый синтаксис, но понадобится импортировать и экспортировать файлы, разбивать код на модули и использовать менеджер пакетов npm.
Серверы, HTTP, Express.js
После изучения Node стоит продолжить знакомство с бэкенд-разработкой и разобраться в серверах и маршрутизации. Можно начать с портов и протоколов с акцентом на HTTP, а потом заняться Express — Node-библиотекой для обработки запросов.
Асинхронный JavaScript
Асинхронность является одной из отличительных фич JavaScript, хотя и создаёт некий раскол среди разработчиков: некоторые её любят, а некоторые — ненавидят. Вам стоит понимать плюсы и минусы этой технологии. Начните со стека вызовов, цикла событий и коллбеков, а затем перейдите к изучению промисов.
Базы данных, схемы, модели и ORM
Базы данных — один из важнейших элементов веб-разработки. Если вашему приложению нужно загружать или хранить какие-либо данные, не теряющиеся при обновлении страницы, придётся использовать БД. Нужно научиться различать реляционные и нереляционные базы данных и разобраться в типах связей. Затем изучить SQL и познакомиться с разными системами управления баз данных. Умение работать с ORM тоже не будет лишним.
Выбор имени функции
Функция – это действие. Поэтому имя функции обычно является глаголом. Оно должно быть простым, точным и описывать действие функции, чтобы программист, который будет читать код, получил верное представление о том, что делает функция.
Как правило, используются глагольные префиксы, обозначающие общий характер действия, после которых следует уточнение. Обычно в командах разработчиков действуют соглашения, касающиеся значений этих префиксов.
Например, функции, начинающиеся с обычно что-то показывают.
Функции, начинающиеся с…
- – возвращают значение,
- – что-то вычисляют,
- – что-то создают,
- – что-то проверяют и возвращают логическое значение, и т.д.
Примеры таких имён:
Благодаря префиксам, при первом взгляде на имя функции становится понятным что делает её код, и какое значение она может возвращать.
Одна функция – одно действие
Функция должна делать только то, что явно подразумевается её названием. И это должно быть одним действием.
Два независимых действия обычно подразумевают две функции, даже если предполагается, что они будут вызываться вместе (в этом случае мы можем создать третью функцию, которая будет их вызывать).
Несколько примеров, которые нарушают это правило:
- – будет плохим выбором, если функция будет выводить с возрастом (должна только возвращать его).
- – будет плохим выбором, если функция будет изменять документ, добавляя форму в него (должна только создавать форму и возвращать её).
- – будет плохим выбором, если функция будет отображать сообщение с текстом (должна только выполнять проверку и возвращать её результат).
В этих примерах использовались общепринятые смыслы префиксов. Конечно, вы в команде можете договориться о других значениях, но обычно они мало отличаются от общепринятых. В любом случае вы и ваша команда должны точно понимать, что значит префикс, что функция с ним может делать, а чего не может.
Сверхкороткие имена функций
Имена функций, которые используются очень часто, иногда делают сверхкороткими.
Например, во фреймворке jQuery есть функция с именем . В библиотеке Lodash основная функция представлена именем .
Это исключения. В основном имена функций должны быть в меру краткими и описательными.
Переменные
Можно объявить при помощи:
- (константа, т.е. изменению не подлежит)
- (устаревший способ, подробности позже)
Имя переменной может включать:
- Буквы и цифры, однако цифра не может быть первым символом.
- Символы и используются наряду с буквами.
- Иероглифы и символы нелатинского алфавита также допустимы, но обычно не используются.
Переменные типизируются динамически. В них могут храниться любые значения:
Всего существует 8 типов данных:
- для целых и вещественных чисел,
- для работы с целыми числами произвольной длины,
- для строк,
- для логических значений истинности или ложности: ,
- – тип с единственным значением , т.е. «пустое значение» или «значение не существует»,
- – тип с единственным значением , т.е. «значение не задано»,
- и – сложные структуры данных и уникальные идентификаторы; их мы ещё не изучили.
Оператор возвращает тип значения переменной, с двумя исключениями:
Подробности: Переменные, Типы данных.
Параметры или аргументы label_name
Имя идентификатора (или имя метки) для оператора. Оператор continue используется для перезапуска циклов, таких как while, цикл for или цикл for-in. Если есть вложенные циклы, оператор continue перезапустит внутренний цикл.
Давайте рассмотрим пример, который показывает, как использовать оператор continue в JavaScript. Вы также можете использовать оператор continue для перезапуска новой итерации цикла while.
Как использовать оператор Continue с циклом while
В этом примере оператор continue используется для перезапуска новой итерации цикла while и пропуска оставшейся части тела цикла.
Как использовать оператор Continue с циклом For
Вы также можете использовать оператор continue для перезапуска новой итерации цикла for. Давайте перепишем наш пример с циклом for.
В этом примере оператор continue используется для перезапуска новой итерации цикла for и пропуска оставшейся части тела цикла.
В этом примере в журнал консоли веб-браузера будет выведено следующее:
- Внутри для включения цикла TechOnTheNet.com
- Внутри для включения петли TechOnTheNet.com
- Внутри для включения петли TechOnTheNet.com
- Сделано для включения петли TechOnTheNet.com
В этом примере запись не записывается в журнал консоли веб-браузера, если счетчик равен 3. Оператор continue перезапустил цикл до того, как можно было выполнить следующую команду (но только тогда, когда счетчик равен 3):
Возврат значения
Функция может вернуть результат, который будет передан в вызвавший её код.
Простейшим примером может служить функция сложения двух чисел:
Директива может находиться в любом месте тела функции. Как только выполнение доходит до этого места, функция останавливается, и значение возвращается в вызвавший её код (присваивается переменной выше).
Вызовов может быть несколько, например:
Возможно использовать и без значения. Это приведёт к немедленному выходу из функции.
Например:
В коде выше, если вернёт , не выполнит .
Результат функции с пустым или без него –
Если функция не возвращает значения, это всё равно, как если бы она возвращала :
Пустой аналогичен :
Никогда не добавляйте перевод строки между и его значением
Для длинного выражения в может быть заманчиво разместить его на нескольких отдельных строках, например так:
Код не выполнится, потому что интерпретатор JavaScript подставит точку с запятой после . Для него это будет выглядеть так:
Таким образом, это фактически стало пустым .
Если мы хотим, чтобы возвращаемое выражение занимало несколько строк, нужно начать его на той же строке, что и . Или, хотя бы, поставить там открывающую скобку, вот так:
И тогда всё сработает, как задумано.
Подбери подходящий онлайн курс для изучения JavaScript с нуля
Есть несколько методов, которые вы можете выбрать, когда будете изучать JavaScript с нуля. Если вы опытный программист, который уже имеет глубокие знания основ программирования, вы должны выучить JavaScript — или любой другой язык — относительно быстро. Просто просматривайте видео, читайте учебники и практикуйтесь в редакторе кода.
Но все не так просто изучать JavaScript для начинающих, у кого нет никакого опыта совсем. Вы можете пройти учебный лагерь по программированию, но это обойдется вам дорого и потребует полной занятости как минимум на 3 месяца (в большинстве случаев). Кроме того, вы можете записаться на курс информатики в университете. Однако это требует еще больших временных затрат, и вы не сможете начать работать программистом в течение как минимум 3 лет, если вы пойдете по этому пути
Наконец, что не менее важно, вы можете использовать высококачественный онлайн JavaScript учебник, который поможет вам освоить JavaScript
Использование онлайн-курса имеет широкий спектр преимуществ по сравнению с учебными лагерями и университетскими курсами. Среди них:
- Многие онлайн-курсы дают вам возможность изучать JavaScript бесплатно — то, что вы никогда не могли бы получить в университете или интенсивных курсах.
- Онлайн курсы позволяют работать в своем собственном темпе. Это отлично подходит для людей, которые работают в течение дня и хотят тратить несколько часов в неделю на изучение JavaScript. Фактически, я приобрел большую часть своих знаний в области программирования, проводя каждый час по два, изучая разные онлайн-курсы.
- В целом, онлайн-курсы структурированы, чтобы дать вам оптимальные знания. Если вы используете их вместе с справочниками и форумами по программированию, вы сможете быстро и эффективно выучить выбранные вами языки.
Если вы ищете онлайн-курс, который поможет вам выучить JavaScript с нуля, вам нужно поискать подходящие курс на платформе BitDegree. Здесь вы найдете ряд замечательных курсов JavaScript с нуля, в том числе интерактивный JavaScript учебник, который рассказывает основы JavaScript простым и понятным способом. В качестве альтернативы, начните с видео-учебника JavaScript, который рассматривает простой синтаксис и некоторые вещи, которые вы можете делать с помощью JavaScript.
Базовые знания
В первую очередь нужно изучить и хорошо ориентироваться в таких темах:
-
-
- основные понятия JavaScript (переменные, операторы, условия, функции, события);
- объектно-ориентированный JS (конструкторы, фабрики, наследование);
- функциональное программирование, функциональный JS (стиль написания программ, при котором просто комбинируется набор функций) — функции высшего порядка, каррирование, чистые функции, fantasy-land, аппликативные функторы, функторы замыкания, рекурсия и т.д.;
- декларативное (что?) и императивное (как?) программирование;
- спецификации тестов Jasmine;
- основы HTML, CSS и jQuery.
-
Git
Git (не путать с сайтом для размещения git-репозиториев GitHub) — один из важнейших инструментов разработчика. На первых порах он может ещё быть неактуальным, но при расширении вашего кругозора и выполнении крупных проектов без него не обойтись.
Вот главные аспекты, в которых нужно ориентироваться:
-
-
- настройка репозиториев в GitHub;
- создание и перемещение файлов в каталогах;
- инициализация и коммиты в Git.
-
Алгоритмы и структуры данных
Нужно изучить (или вспомнить) алгоритмы (сложность алгоритмов), базовые структуры данных (связные списки, очереди, стеки, двоичные деревья поиска, хэш-таблицы…).
Не бойся практиковаться
Если вы действительно хотите изучать JavaScript с нуля и стать уверенным программистом или веб-разработчиком, тогда вам нужно взять на себя обязательство. Одна из наиболее важных частей учебного процесса — практика. Если вы не практикуете написание кода, то вы не будете прогрессировать. Можно конечно оправдываться, что вы практикуетесь в момент изучения курса, однако это не так.
Как я уже говорил ранее, вам нужно скачать отдельный редактор кода. Если у вас есть редактор кода, очень легко практиковаться в написании кода. Я бы порекомендовал перейти на GitHub и поискать открытый код, который доступен там. Найдите фрагмент кода, который выглядит интересным, загрузите его и откройте в редакторе кода, работайте с ним до тех пор, пока не поймете, за что отвечает каждая строка кода.
Еще один отличный способ попрактиковаться в написании кода на JavaScript — это решать «задачи программирования». Поиск в Google откроет сотни таких задач, которые предназначены для людей, которые учатся и которым нужны примеры JavaScript, через которые они могут работать. Выберите то, что подходит под ваш уровень, не бойтесь спрашивать других, если вы что-то не понимаете — но об этом чуть позже.
Прежде всего, вам следует помнить:
«Практика сделает из вас профи»
Нет, практика не делает из вас профи сама по себе — правильная практика практика сделает. Изучайте по последним передовым методам и не ленитесь при написании кода JavaScript, в противном случае у вас будут появляться “вредные привычки”.
Абстрактный класс и интерфейс
- В интерфейсе отсутствует код реализации, а все методы являются абстрактными. То есть, все методы объявляются, но ни один не определяется.
- В абстрактном классе есть исполняемые и абстрактные методы.
- Класс реализует сколько угодно интерфейсов, но расширяет только один абстрактный класс.
- Методы абстрактного класса могут быть или не быть абстрактными.
- Абстрактный класс не может превратиться в экземпляр, но может стать подклассом.
- Все абстрактные методы должны определяться в подклассе, то есть, подкласс является абстрактным.
- Создавать экземпляры из интерфейса нельзя. Их можно реализовывать в других классах или расширять другими интерфейсами.
- Переменные интерфейсов конечные и статические. По умолчанию, все методы интерфейса публичные и абстрактные.
- Интерфейс не может содержать реализацию и не может превращаться в подкласс. Все переменные должны быть постоянными.
ИЛИ «||» находит первое истинное значение
Описанная выше логика соответствует традиционной. Теперь давайте поработаем с «дополнительными» возможностями JavaScript.
Расширенный алгоритм работает следующим образом.
При выполнении ИЛИ || с несколькими значениями:
Оператор выполняет следующие действия:
- Вычисляет операнды слева направо.
- Каждый операнд конвертирует в логическое значение. Если результат , останавливается и возвращает исходное значение этого операнда.
- Если все операнды являются ложными (), возвращает последний из них.
Значение возвращается в исходном виде, без преобразования.
Другими словами, цепочка ИЛИ возвращает первое истинное значение или последнее, если такое значение не найдено.
Например:
Это делает возможным более интересное применение оператора по сравнению с «чистым, традиционным, только булевым ИЛИ».
-
Получение первого истинного значения из списка переменных или выражений.
Представим, что у нас имеется ряд переменных, которые могут содержать данные или быть . Как мы можем найти первую переменную с данными?
С помощью :
Если бы и , и были ложными, в качестве результата мы бы наблюдали .
-
Сокращённое вычисление.
Операндами могут быть как отдельные значения, так и произвольные выражения. ИЛИ вычисляет их слева направо. Вычисление останавливается при достижении первого истинного значения. Этот процесс называется «сокращённым вычислением», поскольку второй операнд вычисляется только в том случае, если первого недостаточно для вычисления всего выражения.
Это хорошо заметно, когда выражение, указанное в качестве второго аргумента, имеет побочный эффект, например, изменение переменной.
В приведённом ниже примере не изменяется:
Если бы первый аргумент имел значение , то приступил бы к вычислению второго и выполнил операцию присваивания:
Присваивание – лишь один пример. Конечно, могут быть и другие побочные эффекты, которые не проявятся, если вычисление до них не дойдёт.
Как мы видим, этот вариант использования является «аналогом «. Первый операнд преобразуется в логический. Если он оказывается ложным, начинается вычисление второго.
В большинстве случаев лучше использовать «обычный» , чтобы облегчить понимание кода, но иногда это может быть удобно.
Итого
Объявление функции имеет вид:
- Передаваемые значения копируются в параметры функции и становятся локальными переменными.
- Функции имеют доступ к внешним переменным. Но это работает только изнутри наружу. Код вне функции не имеет доступа к её локальным переменным.
- Функция может возвращать значение. Если этого не происходит, тогда результат равен .
Для того, чтобы сделать код более чистым и понятным, рекомендуется использовать локальные переменные и параметры функций, не пользоваться внешними переменными.
Функция, которая получает параметры, работает с ними и затем возвращает результат, гораздо понятнее функции, вызываемой без параметров, но изменяющей внешние переменные, что чревато побочными эффектами.
Именование функций:
- Имя функции должно понятно и чётко отражать, что она делает. Увидев её вызов в коде, вы должны тут же понимать, что она делает, и что возвращает.
- Функция – это действие, поэтому её имя обычно является глаголом.
- Есть много общепринятых префиксов, таких как: , , , и т.д. Пользуйтесь ими как подсказками, поясняющими, что делает функция.
Функции являются основными строительными блоками скриптов. Мы рассмотрели лишь основы функций в JavaScript, но уже сейчас можем создавать и использовать их. Это только начало пути. Мы будем неоднократно возвращаться к функциям и изучать их всё более и более глубоко.