[Just JavaScript] The JavaScript Вселенная

Опубликовано: 10 May 2020 07:05Обновлено: 31 May 2020 10:05
[Just JavaScript] The JavaScript Вселенная

В начале было Значение.


Что есть значение? Сложно сказать.


Все равно, что спросить, что такое число в математике, или что такое точка в геометрии. Значение это нечто во вселенной JavaScript.


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


Код и Значения


Для того, чтобы отличать значения от всего остального в JavaScript коде, представь иллюстрацию Маленький принц Антуана де Сент-Экзюпери:


download (1).jfif


Ты стоишь на небольшом астеройде — это и есть код твоей программы.


Прямо на поверхности ты видишь операторы if, объявления переменных, запятые, фигурные скобки и все остальное, что можно найти в JS коде.


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


Но время от времени я смотрю вверх.


В ясную ночь ты смотришь на небо и видишь разные значения: булевы (логические типы данных), числа, строки, символы, функции и объекты, null и undefined — ого! Ты бы мог сослаться на них в коде, но они не существуют внутри кода.


Во вселенной JavaScript значения плавают в космосе.


download.png


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


Возвращаясь к значениям. В целом два стула типа:


Примитивные типы значений:


Кроме всего прочего, числа и строки это примитивные значения.Открой консоль в браузере и набери эти значения используя console.log():


console.log(2);

console.log("hello");

console.log(undefined);


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


Это и есть первый тип значений.


Объекты и функции:


Объекты и функции тоже значения, но не примитивные, что делает их особенными. Давай посмотрим на них через консоль браузера:


console.log( { } );

console.log( [ ] );

console.log(x => x * 2);


Заметил как их отображение в консоли отличается от примитивов. Некоторые браузеры могут показывать стрелку перед ними, или колдовать магию при нажатии на одно из этих значений. Если у тебя есть другие браузеры, например Chrome и Firefox, сравни как они отображают объекты и функции.


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


Вот и второй тип значений.


У тебя могут возникнуть вопросы. Прекрасно. Задавай, и вселенная JavaScript может ответить! При условии, конечно, что ты умеешь спрашивать.


Выражения:


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


Но есть такие вопросы, на которые JavaScript ответит с радостью. Такие вопросы имеют особое название - их называют выражения.


Если ты "спросишь" сколько будет 2 + 2, JavaScript "ответит" 4 еблан.


console.log(2 + 2); // 4


Выражения это вопросы, на которы у JavaScript есть ответ. JavaScript отвечает на выражения только так, как он знает - при помощи значений.


download.gif


Если слово "выражение" сбивает с толку, то подумай о нем как о куске кода, который ясно выражает значение. Ты мог уже слышать, что говорят 2 + 2 "приводится к" или "вычисляется в" 4. Конечно есть и другие способы описать это выражение.


Мы спрашиваем JavaScript 2 + 2, и он отвечает 4. Выражения всегда возвращают одиночное значение. Теперь ты знаешь достаточно про выражения, чтобы тебя занесли в списки самых опасных преступников вселенной.


Ранее было замечено, что есть несколько типов значений в JavaScript: числа, строки, объекты и т.д.. Как мы узнаем какой-либо конкретный тип значения?


Звучит как вопрос. Отважимся ли мы его задать?


Проверка Типа


Первое время все значения в JavaScript космосе могут выглядеть одинаково — яркие точки на небе. Но если ты приглядишься, то обнаружишь менее десяти типов значений. Значения с одинаковыми типами ведут себя схожим образом.


Если надо проверить тип значения, то достаточно воспользоваться оператором typeof. JavaScript ответит на вопрос с помощью одного из предопределенных строковых значений: "number" (число), "string" (строка) или "object" (объект).


download (1).png


Ниже представлены несколько примеров, которые ты можешь попробовать в консоли браузера:


console.log(typeof(2)); // "number"

console.log(typeof("hello")); // "string"

console.log(typeof(undefined)); // "undefined"


Смотри, typeof(2) является выражением — и оно приводит к значению "число".


Строго говоря, использование скобок с оператором typeof не обязательно. Например, typeof 2 сработает как и typeof(2). Однако, иногда скобки обязательны для того, чтобы избежать неоднозначности. Один из приведенных ниже примеров не сработает, если ты не поставишь скобки. Попробуй догадаться который:


console.log(typeof( { } )); // "object"

console.log(typeof( [ ] )); // "object"

console.log(typeof(x => x * 2)); // "function"


Проверь свою догадку в консоли браузера.


36f871cf77076f72


Взглляни еще раз на последние три примера — в этот раз обрати пристальное внимание на результаты. Не видишь ли ты что-то необычное? Что именно?


Типы значений


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


Примитивные значения.


  1. undefined, используется для непреднамеренно пропущенных значений.
  2. null, используется преднамеренно пропущенных значений.
  3. boolean (true или false), используется для логических операций.
  4. number, используется для матетатических расчетов.
  5. string, используется для текста.
  6. Symbol, используется для маскировки деталий реализации.
  7. BigInt, используется для матетатических расчетов на больших числах.


Объекты и функции.


  1. Object, используется для группировки связанных данных и кода.
  2. Function, используется для обозначения кода.


Других типов нет.


У тебя возник вопрос: "Как насчет других типов, которые я использовал, например массивы (array)?"


В JavaScript нет других фундаментальных типов значений, кроме тех, которые мы только что перечислили. Все остальные - объекты! Например, даже массивы, даты и регулярные выражения по сути объекты в JavaScript:


console.log(typeof( [ ] )); // "object"

console.log(typeof(new Date())); // "object"

console.log(typeof(/(hello|goodbye)/)); // "object"


"Понятно," - ответил ты, "это потому что все это объект!" Увы, это популярная городская легенда, но это не так. Такой код как "hi".toUpperCase()

делает "hi" якобы объектом, но это лишь иллюзия. Когда выполняется этот код, JavaScript создает объект-оболочку, а затем немедленно его отбрасывает.


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


Повторим вкратце


  1. Есть значения, а потом все остальное. Мы представляем значения как разные штуки "плавают" во всленной JavaScript. Они не существуют в нашем коде, но мы можем ссылаться на них.
  2. Две категории значений: Примитивные и Объекты и Функции. В общем 9 различных типов. Каждый тип служит определенной цели, но некоторые используются редко.
  3. Некоторые значения одиноки. Например, null единственное значение null типа, и undefined единственное значение undefined типа. Чуть позже ты узнаешь, почему эти типы могут быть занозой в заднице!
  4. Мы можем задавать вопросы при помощи выражений. JavaScript ответит значением. Например, ответ на выражение 2 + 2 будет равен 4.
  5. Мы можем проверить тип чего-либо обернув в typeof выражение. Например, typeof(4) будет "number".


r_2347874_pNrMx


Упражнения


Пришоло время использовать знания на практике.


Даже если у тебя достаточно опыта в разработке на JavaScript, не проходи мимо! Лично я только сейчас узнал некоторые моменты.


Жми сюда для прохождения небольшого опросника.


Далее ты иследуешь примитивы более детально. Посмотришь на то как разные типы имеют между собой что-то общее, и изучишь равенства в JavaScript'е.


Ты также продолжишль совершенствовать ментальную модель.


В этом модуле представлен грубый набросок или приблизительный. Мы сосредоточимся на разных частях изображения и добавим к ним больше деталей, например, прогрессивное изображение JPEG.


Эта статья может показаться слишком маленькими шагами, но ты закладываешь твердый фундамент для всего остального. Ты создаешь целую вселенную JavaScript.


----


Адаптация и перевод статьи второго модуля Just JavaScript от Den Abramov. Подписаться на почтовую рассылку на английском языке можно на сайте Just JavaScript.