Основы 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 и пропуска оставшейся части тела цикла.

В этом примере в журнал консоли веб-браузера будет выведено следующее:

  1. Внутри для включения цикла TechOnTheNet.com
  2. Внутри для включения петли TechOnTheNet.com
  3. Внутри для включения петли TechOnTheNet.com
  4. Сделано для включения петли 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.

Расширенный алгоритм работает следующим образом.

При выполнении ИЛИ || с несколькими значениями:

Оператор выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Каждый операнд конвертирует в логическое значение. Если результат , останавливается и возвращает исходное значение этого операнда.
  • Если все операнды являются ложными (), возвращает последний из них.

Значение возвращается в исходном виде, без преобразования.

Другими словами, цепочка ИЛИ возвращает первое истинное значение или последнее, если такое значение не найдено.

Например:

Это делает возможным более интересное применение оператора по сравнению с «чистым, традиционным, только булевым ИЛИ».

  1. Получение первого истинного значения из списка переменных или выражений.

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

    С помощью :

    Если бы и , и были ложными, в качестве результата мы бы наблюдали .

  2. Сокращённое вычисление.

    Операндами могут быть как отдельные значения, так и произвольные выражения. ИЛИ вычисляет их слева направо. Вычисление останавливается при достижении первого истинного значения. Этот процесс называется «сокращённым вычислением», поскольку второй операнд вычисляется только в том случае, если первого недостаточно для вычисления всего выражения.

    Это хорошо заметно, когда выражение, указанное в качестве второго аргумента, имеет побочный эффект, например, изменение переменной.

    В приведённом ниже примере не изменяется:

    Если бы первый аргумент имел значение , то приступил бы к вычислению второго и выполнил операцию присваивания:

    Присваивание – лишь один пример. Конечно, могут быть и другие побочные эффекты, которые не проявятся, если вычисление до них не дойдёт.

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

    В большинстве случаев лучше использовать «обычный» , чтобы облегчить понимание кода, но иногда это может быть удобно.

Итого

Объявление функции имеет вид:

  • Передаваемые значения копируются в параметры функции и становятся локальными переменными.
  • Функции имеют доступ к внешним переменным. Но это работает только изнутри наружу. Код вне функции не имеет доступа к её локальным переменным.
  • Функция может возвращать значение. Если этого не происходит, тогда результат равен .

Для того, чтобы сделать код более чистым и понятным, рекомендуется использовать локальные переменные и параметры функций, не пользоваться внешними переменными.

Функция, которая получает параметры, работает с ними и затем возвращает результат, гораздо понятнее функции, вызываемой без параметров, но изменяющей внешние переменные, что чревато побочными эффектами.

Именование функций:

  • Имя функции должно понятно и чётко отражать, что она делает. Увидев её вызов в коде, вы должны тут же понимать, что она делает, и что возвращает.
  • Функция – это действие, поэтому её имя обычно является глаголом.
  • Есть много общепринятых префиксов, таких как: , , , и т.д. Пользуйтесь ими как подсказками, поясняющими, что делает функция.

Функции являются основными строительными блоками скриптов. Мы рассмотрели лишь основы функций в JavaScript, но уже сейчас можем создавать и использовать их. Это только начало пути. Мы будем неоднократно возвращаться к функциям и изучать их всё более и более глубоко.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector