Примечания к первым четырем главам Марджина Хавербеке Eloquent Javascript доступны бесплатно по адресу: https://eloquentjavascript.net/. Эта книга очень помогла мне понять некоторые концепции JavaScript. Я хотел поделиться своими заметками в надежде, что они помогут кому-то еще, когда они начинают свой путь с Javascript. Я обнаружил, что эти главы охватывают большую часть фундаментальных JS, но я буду обновлять их по мере того, как буду делать заметки в следующих главах. Очень рекомендую прочитать книгу! Но если у вас мало времени… прокрутите вниз.

Введение

Что такое Javascript?

- JavaScript был создан Бренданом Эйхом в 1995 году для добавления программ на веб-страницы в Netscape Navigator.

- С тех пор был принят во всех других основных графических веб-браузерах.

- Не имеет ничего общего с Java, подобное название используется в маркетинговых целях.

- Стандарт ECMAScript был написан для обеспечения универсальной работы Javascript

- ECMAScript назван в честь организации Ecma International, которая проводила стандартизацию

- ECMAScript и Javascript могут использоваться как взаимозаменяемые.

Глава 1

Значения, типы и операторы

Значения

- Чтобы вызвать значение, просто вызовите его имя, оно соответствует битам в энергозависимой памяти (если не сохранено)

- Когда значение больше не нужно, оно рассеивается и оставляет свои биты в памяти для повторного использования.

Числа

- Можно использовать научную запись (число, затем e, затем число, в котором 10 в степени)

- следует за PEMDAS

- «%», называемый по модулю, используется для обозначения остатка (от деления)

- могут использоваться "бесконечность" и "-бесконечность"

- «NaN» (не число) выдавалось, когда результат нелогичен

Строки

- Обычно используется для представления текста

- Может быть отмечен одинарными кавычками, двойными кавычками или обратными кавычками.

- Новые строки (символ в результате нажатия клавиши ввода) можно заключать в кавычки только с обратными кавычками без экранирования.

- В экранировании используется символ «\» перед символом со специальным значением (например, кавычкой) для включения его в строку.

- Если символ 'n' встречается после обратной косой черты, он интерпретируется как новая строка, 't' означает символ табуляции.

- Чтобы получить в строке только обратную косую черту, используйте "\\"

- Unicode используется для перевода строк в биты

- Unicode присваивает номер каждому доступному символу, включая другие языки

- Строки можно объединять с помощью "+"

- Строки, заключенные в кавычки, называются шаблонными литералами и могут включать другие значения, т. Е. Использовать $ {для вычисления и преобразования его в строку}

Унарные операторы

- Унарные операторы используют одно значение (например, typeof).

- Операторы, принимающие два значения, называются бинарными операторами (т. Е. "&" "+").

Сравнение

- Логические значения различают 2 возможности истинное и ложное.

- Бинарные операторы:

'

'>' больше чем

‘› = ’Больше или равно

‘‹ = ’Меньше или равно

‘==’ равно

‘===’ в точности равно

'!=' Не равно

‘! ==’ не совсем равно

Логические операторы

- Может использоваться с логическими значениями

- ‘&&’ логическое и (двоичное)

- ‘||’ логическое или (двоичное)

- ‘!’ Не (унарный)

- Условный оператор (тернарный)

console.log (правда? 1: 2);

- Значение слева от вопросительного знака указывает, какое значение будет в результате (true выбирает середину, а let выбирает право)

Пустые значения

- null и undefined, используются для обозначения отсутствия значимого значения

Автоматическое преобразование типа

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

- Когда что-то, что не отображается в число очевидным образом, преобразуется в число, вы получаете NaN, поэтому ищите случайное преобразование типа, если вы видите это

- Точно равны и не равны, чтобы избежать автоматического преобразования типов (хорошая практика для защитного кодирования)

Замыкание логических операторов

- Сохраняет максимально короткий контур

- ‘||’ не будет оценивать то, что находится справа, если левое дает истинное значение (это означает, что он не будет назначать переменные или запускать функции, если они находятся справа после того, как левое значение истинно)

- ‘&&’ не будет оценивать то, что находится справа, если левое ложно

Резюме

«В этой главе мы рассмотрели четыре типа значений JavaScript: числа, строки, логические значения и неопределенные значения. Такие значения создаются путем ввода их имени (true, null) или значения (13, «abc»). Вы можете комбинировать и преобразовывать значения с помощью операторов. Мы видели бинарные операторы для арифметики (+, -, *, / и%), конкатенации строк (+), сравнения (==,! =, ===,! ==, ‹,›, ‹=,› = ) и логику (&&, ||), а также несколько унарных операторов (- для отрицания числа,! для логического отрицания и typeof для поиска типа значения) и тернарного оператора (? :) для выбора одного из двух значения, основанные на третьем значении ».

Глава 2

Структура программы

Выражения и утверждения

- Выражение - это фрагмент кода, который производит значение

- Выражения могут содержать другие выражения

- Если выражение соответствует фрагменту предложения, оператор Javascript соответствует полному предложению, программа - это список операторов.

- Заявление стоит само по себе и сводится к чему-то, только если оно влияет на мир, эти изменения называются побочными эффектами.

- ";" завершает заявление

Привязки

- Представьте переменные в виде щупалец, а не коробок, они воспринимают значения, а не содержат их

- Две переменные могут относиться к одному и тому же значению

- «let» и «var» могут использоваться для объявления переменных, но они разные (см. Главу 3)

- Один оператор «var» или «let» может определять несколько переменных (разделенных запятыми).

- «const» - константа, определяет привязку константы, указывающую на одно и то же значение, пока оно существует.

Имена привязки

- Может включать цифры, но не должны начинаться с них

- Может включать «$» или «_», но не может содержать другие знаки препинания или специальные символы.

- Нет слов со специальным значением (пусть, если)

- Некоторые другие слова зарезервированы, если создание привязки приводит к синтаксической ошибке, проверьте, зарезервировано ли слово

Окружающая среда

- Сборник привязок и их значений, существующих в данный момент

- Браузер также содержит привязку и функции, прежде чем мы что-либо напишем

Функции

- Часть программы, заключенная в значение

- Эти значения могут применяться для запуска обернутой программы.

- Выполнение функции называется ее вызовом, вызовом или применением.

- Вызов функции, заключая круглые скобки после выражения, которое производит значение функции.

- Аргументы: значения в круглых скобках, которые передаются программе внутри функции.

- Разным функциям требуется разное количество или тип аргументов.

Console.log

- console.log (записывает свои аргументы в какое-то устройство вывода текста)

- Подходит для простой отладки

Возвращаемые значения

- Когда функция создает значение, считается, что она «возвращает» это значение.

- Все, что создает значение, называется выражением в JS, что означает, что функции, возвращающие значения, могут использоваться в более крупных выражениях.

Поток управления

- Заявления оформляются сверху вниз, как рассказ

Условное исполнение

- ключевое слово ‘if’ создает ответвление, при котором программа выбирает ответвление в зависимости от ситуации.

- Оператор после «if» заключен в фигурные скобки, которые используются для группировки любого количества операторов в один оператор, называемый «блоком».

- Схема для оператора «if», содержащего один оператор «else if» и «else» ниже.

Циклы While и Do

- Цикл продолжает ввод данного оператора до тех пор, пока выражение (в круглых скобках перед фигурными скобками) дает логическое значение «true».

- Цикл «do» всегда выполняет тело хотя бы один раз и начинает проверку, следует ли его останавливать только после этого.

- Доступны циклы while и for (различия обсуждаются в разделе «Циклы For»)

Код отступа

- Важно для удобочитаемости

Для циклов

- в цикле «for» все операторы, относящиеся к «состоянию» цикла, группируются вместе после «for»

- Скобки после «for» обычно содержат 2–3 части, первая инициализирует цикл, вторая - выражение, проверяющее, следует ли продолжить, третья обновляет состояние цикла.

- Обычно короче и чище, чем цикл while.

- Циклы «for» обычно следует использовать при повторении цикла определенное количество раз

- Циклы «while» обычно следует использовать при прохождении цикла до тех пор, пока не будет выполнено определенное условие.

Выход из цикла

- Цикл может завершиться, если будет выдано логическое выражение «false» или с помощью «break».

- Будьте осторожны, создавая бесконечные циклы при использовании «break» без остановки цикла.

- «continue» заставляет цикл продолжаться со следующей итерации.

Краткое обновление привязок

- Горячие клавиши оператора:

‘* = N’ умножьте на n и сделайте его равным новому значению

‘/ = N’ разделите на n и сделайте его равным новому значению

‘+ = N’ или ‘++’, если добавлено только на 1

‘-=n’ or ‘ — ’

Отправка значения с помощью переключателя

- Выражает «отправку» более прямым образом, чем «если».

- Использует утверждения case и default, если ни один регистр не является истинным.

- Код будет выполняться до тех пор, пока не дойдет до "break".

Использование заглавных букв

- Используйте camelCase

Комментарии

- ‘//’ для однострочных комментариев

- ‘/ *’ и ‘* /’ для блоков комментариев

Резюме

«Помещение операторов друг за другом дает вам программу, которая выполняется сверху вниз. Вы можете внести нарушения в поток управления, используя условные (if, else и switch) и циклические (while, do и for) операторы.
Можно использовать привязки для хранения фрагментов данных под именем и они полезны для отслеживания состояния в вашей программе. Среда - это набор определенных привязок. Системы JavaScript всегда помещают в вашу среду ряд полезных стандартных привязок.
Функции - это специальные значения, которые инкапсулируют часть программы. Вы можете вызвать их, написав имя-функции (аргумент1, аргумент2). Такой вызов функции является выражением и может дать значение ».

Глава 3

Функции

Определение функции

- Обычная привязка, где значением является функция

- Создан с выражением, которое начинается с ключевого слова «функция».

- Иметь набор параметров и тело

- Тело содержит операторы, которые должны выполняться при вызове функции

- Некоторые функции производят значение, а некоторые - побочный эффект.

- оператор «return» определяет значение, возвращаемое функцией, и передает значение коду, который вызвал функцию (немедленно, когда на него попадает элемент управления)

- оператор return без выражения после приведет к тому, что функция вернет значение undefined, функции без оператора return также вернут undefined

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

Привязки и области

- У привязки есть «область действия», которая является частью программы, в которой привязка видна.

- На привязку в «глобальной области» можно ссылаться на протяжении всей программы.

- «локальные привязки» взаимодействуют в «локальной среде» и объявляются в этой функции, и на них можно ссылаться только

- Каждый раз, когда вызывается функция, создаются новые экземпляры этих привязок.

- «let» и «const» являются локальными по отношению к «блоку», в котором они объявлены, и не могут быть «видны» всей функцией.

- "var" отображается на протяжении всей функции

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

Вложенная область действия

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

- «лексическая область видимости» - это подход к видимости привязки, который позволяет каждой локальной области видимости видеть все локальные области, которые ее содержат, а также все глобальные области.

Функции как значения

- Привязка функции обычно действует как имя, которое будет «вызвано» для функции, но ее также можно использовать в произвольных выражениях, как и другие значения.

Обозначение декларации

- Когда ключевое слово «функция» используется в начале инструкции

- Более короткий способ создания привязки функции

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

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

Стрелочные функции

- пишется со знаком "=› "после параметров и перед телом.

- Может быть названо с привязкой (var, const, let)

- То же, что и «функция», только более простой способ записывать более мелкие функции.

Стек вызовов

- Каждый раз, когда функция вызывается, текущий контекст сохраняется в верхней части «стека вызовов», а когда он возвращает, он удаляет контекст из стека и использует этот контекст для продолжения выполнения.

- Для хранения этого стека требуется память компьютера.

- Кодирование бесконечного количества операций вперед и назад между функциями могло бы вызвать сообщение об ошибке «слишком много рекурсии» или «недостаточно места».

Необязательные аргументы

- Если мы скармливаем функции слишком много параметров, она проигнорирует лишние.

- Слишком мало параметров, и он вернет «undefined» только для отсутствующих параметров.

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

- Плюс в том, что функцию можно вызывать с разным количеством аргументов.

- Если оператор ‘=’ записан после аргумента, за которым следует выражение, значение выражения заменит аргумент, если он не указан

Закрытие

- «закрытие» - это возможность ссылаться на конкретный экземпляр локальной привязки во включающем цикле.

- Функция, которая ссылается на привязки из локальной области видимости, называется «закрытием».

- Локальные привязки воссоздаются для каждого вызова, и разные вызовы не мешают локальным привязкам друг друга.

Рекурсия

- Функция, которая вызывает сама себя, является «рекурсивной».

- Обычно менее эффективная, но более простая альтернатива зацикливанию.

Растущие функции

- Пишите умный и универсальный код, но только столько, сколько вы знаете, что собираетесь использовать

Функции и побочные эффекты

- «Чистая» функция - это функция, производящая значение, которая не имеет побочных эффектов и не зависит от побочных эффектов от другого кода или глобальных привязок.

Резюме

  • Определите функцию, объявите функцию и стрелочные функции
  • Каждый блок создает новую область видимости и может видеть только эту локальную область и области за ее пределами.
  • Привязка ‘var’, объявленная в локальной области видимости, доступна в ближайшей области видимости функции.

Глава 4

Структуры данных: объекты и массивы

Наборы данных

- Объекты позволяют нам группировать значения, включая другие объекты, для построения более сложных структур.

- «массив» - это список значений в квадратных скобках, разделенных запятыми, используемых для хранения последовательностей значений.

- Первый «индекс» массива равен нулю

Свойства

- «value.x» извлекает свойство «значения» с именем «x»

- ‘value [x]’ пытается вычислить выражение x и использует результат, преобразованный в строку, в качестве имени свойства.

- Имена свойств представляют собой строки

- Элементы в массиве сохраняются как свойства массива с использованием чисел в качестве имен свойств.

- «длина» также является названием свойства.

Методы

- Свойства, содержащие функции, обычно называются «методами» значения, которому они принадлежат (т.е. toUpperCase - это метод строки)

- Методы:

‘.ToUpperCase’

‘.ToLowerCase’

«.Push» добавляет значение в конец массива.

‘.Pop’ удаляет последнее значение в массиве.

- Эти имена являются традиционными терминами для операций со «стеком» (структурой данных).

Объекты

- Значения типа «объект» - это произвольные наборы свойств.

- Создайте объект, используя фигурные скобки в качестве выражения, равного привязке.

- Можно присвоить значение выражению свойства с помощью оператора «=», заменяющего значение свойства, если оно существует, или создать новое свойство, если нет.

- «delete» - это унарный оператор, который удаляет указанное свойство из объекта.

- оператор ‘in’ при применении к строке, и объект сообщает нам, есть ли у объекта свойство с таким именем

- Массивы могут содержать объекты

Изменчивость

- Числа, строки и логические значения неизменяемы (не могут изменить значение)

- Можно изменить свойства объектов, в результате чего один объект будет иметь разное содержимое в разное время.

Дальнейшая массивология

- «unshift» добавит значение в начало массива

- «shift» удалит значение из начала массива

- Метод indexOf просматривает массив от начала до конца и возвращает индекс, по которому было найдено запрошенное значение.

- ‘lastIndexOf’ выполняет поиск от конца до начала

- Оба могут принять второй аргумент в пользу того, с чего начать поиск.

- «slice» принимает выбранные начальный и конечный индексы и возвращает только значения между ними (можно опустить начальный индекс, чтобы скопировать весь массив, или конечный индекс, чтобы взять все элементы после начального индекса)

- «concat» может объединять массивы вместе для создания нового массива (начальный индекс включен, а конечный - нет. Значение, которое не является массивом, будет добавлено к новому массиву, как одноэлементный массив)

Строки и их свойства

- Некоторые встроенные свойства можно использовать в строках (например, «slice» и «indexOf»).

- ‘indexOf’ может искать в строке несколько символов.

- «обрезать» удаляет пробелы, символы новой строки, табуляции и подобные символы.

- метод padStart принимает в качестве аргументов символы желаемой длины и заполнения.

- «разбивать» строку при каждом появлении другой строки

- строка «присоединиться»

-’Repeat ’создает новую строку, содержащую несколько склеенных вместе копий исходной строки.

- Возможность доступа к отдельным символам в строке аналогично доступу к элементам массива

Остальные параметры

- ’…’ перед тем, как последний параметр функции будет привязан к массиву, содержащему все дальнейшие аргументы

- «…» также можно использовать для вызова функции с массивом аргументов, распространяя массив в вызов функции, передавая элементы как отдельные аргументы.

Математический объект

- Используется как контейнер для группировки связанных функций

- «Math.min»

- «Math.max»

- «Math.cos, tan, sin»

- «Math.PI»

- ‘Math.random’ 0 включен, а 1 нет

- «Math.floor, ciel, round»

- «Math.abs», который принимает абсолютное значение числа.

Деструктуризация

- Если вы знаете значение, которое хотите привязать к массиву, вы можете использовать квадратные скобки, чтобы заглянуть внутрь значения и связать его содержимое.

- Используйте фигурные скобки вместо квадратных, чтобы сделать это для объектов (поместите квадратные скобки вокруг переменной, которая объявляется как объект)

JSON

- Обозначение объектов JavaScript

- Свойства только воспринимают свое значение, а не содержат его, и хранятся в памяти в виде последовательностей битов, содержащих адреса своего содержимого.

- Данные сохраненных адресов могут быть сериализованы (преобразованы в плоское описание) в JSON.

- Похоже на запись массивов

- Все названия свойств должны быть заключены в двойные кавычки.

- Разрешены только простые выражения данных, никаких вычислений

- Без комментариев

- «JSON.stringify» принимает значение JS и возвращает строку в кодировке JSON.

- «JSON.parse» принимает строку JSON и преобразует ее в JS.

Резюме

«Объекты и массивы (которые представляют собой особый вид объектов) предоставляют способы сгруппировать несколько значений в одно значение. Концептуально это позволяет нам положить кучу связанных вещей в сумку и бегать с сумкой, вместо того, чтобы обхватывать все отдельные вещи и пытаться удерживать их по отдельности ».