Данные и переменные

JavaScript слаботипизированный (с динамической типизацией) язык программирования

Слабая типизация языка обусловлена 2мя основными чертами:

  • возможность изменять (переназначать) значение переменной;

  • приведение типов (изменение типа данных) у значения.

Во-первых, всё, что нас окружает, это в первую очередь данные!

Данные описывают сущности, их свойства и действия над ними.

В JavaScript данные разделены на 2 больших семейства:

  • примитивные данные;

  • объекты.

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

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

Это как мы именуем различные емкости и упаковки, благодаря которым можем хранить и брать предметы: `Дай-ка мне вон ту красную коробку с печеньем !`

let redBox = "cookies"

А теперь давайте рассмотрим, почему let, почему redBox, почему = и почему "cookies"

Уже стало ясно, что переменные можно создавать и к переменным можно обращаться.

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

В JavaScript три ключевых слова для создания переменных:

  • const

  • let

  • var

Давайте посмотрим сравнительную таблицу и поймем, зачем аж три ключевых слова: *false - нельзя, true - можно

свойство
CONST
LET
VAR

Область видимости

блочная

блочная

глобальная

Использование до объявления

false

false

true

Объявление без значения

false

true

true

Присвоение нового значения

false

true

true

Получается, что const ничего нельзя, а что же тогда можно, ибо зачем оно тогда?

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

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

let - позволяет создать переменную без инициализации (присвоения ей значения).

Ага, хорошо, если мы создали переменную и не присвоили ей значение, она же не будет пустовать, значит ей можно и присвоить новое значение, то есть переназначить?

Да, именно!

Переменные, объявленные через let можно не инициализировать, но в таком случае, всё-равно ей будет присвоено значение - имя которому undefined, а в последствии можно присваивать новые значения, которые заменят собой предыдущие.

Отлично! Тут ясно-понятно. А что тогда такого специфического в ключевом слове var?

var - обладает свойствами let, то есть, можно объявлять без инициализации, переприсваивать значения после сколько душе угодно, но у var есть главное отличие как от let так и от const - к переменным, объявленным через var можно обращаться до их объявления, это, конечно, не даст нам поработать с их значениями, потому что они еще не присвоены (судя по потоку кода сверху вниз), но тем не менее, такое преждевременное обращение к переменной не вызовет ошибку и остановку работы кода.

С объявлением переменных разобрались, теперь смотрим, как к ним обращаться, чтобы поработать с их значениями.

  • обращение к переменной по ее имени (идентификатору)! Ключевое слово писать не нужно, оно указывается только раз - при объявлении переменной. Все дальнейшие обращения к ней только по имени (и с уважением 😄)

Класс! Создать - создали, обратиться - обратились, по имени и с уважением.

А что по именам, те, что идентификаторы?

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

Существуют правила и хороший тон именования переменных:

  • имя на английском языке английскими буквами (простите за тавтологию);

  • описательное - слёту дает понять, что хранится в этой переменной;

  • без пробелов и каких-либо символов (кроме _ # и $ - но это отдельные случаи) - просто зарубить на носу, а когда научитесь внятно именовать переменные, можете процедить просторы паутины и изучить почему так, вплоть до бинарного представления;

  • прописными (маленькими) буквами - если имя односоставное и кэмэл-кейсом, но тоже начиная с маленькой буквы - lowerCamelCase* - если многосоставное, а для ES6-классов и функций-конструкторов ванильного Js и компонентов в библиотеке React - просто CamelCase*;

  • числа в имени - плохая практика;

  • допустимо, но не принято в Js именование в стилях: snake_case и kebab-case;

  • UPPER_SNAKE_CASE себя изжил с выходом стандарта ES6, который привнес ключевое слово const для объявления переменных. Переменной с const и так нельзя будет изменить значение, но всё-еще встречается практика именования переменных в этом стиле, если значение ни в коем случае изменять нельзя. Что хранят в переменных с таким именем? url-адрес и еще какие-либо данные для http-запросов на сервер, например.

*Есть две правды про названия стиля CamelCase. Одни утверждают, что CamelCase это, на самом деле PascalCase, а отпрыск lowerCamelCase и есть сам camelCase. По крайней мере по данным из блога Microsoft от Брэда Абрамса — “History around Pascal Casing and Camel Casing”, говорится, что термин PascalCase абсолютно логично проистекает из языка Pascal, стандартные методы которого именуются с заглавной буквы (Abs, Random, Round). Но думайте сами, решайте сами, кто из них кто, главное - именуйте переменные правильно и описательно!

Мы, конечно же сами придумываем имена нашим переменным, но есть набор слов, которые нельзя использовать, потому что они являются ключевыми словами в программировании и зарезервированы под конкретную сущность, например слова: class, function, switch нельзя использовать в качестве имени переменной, об этом даже консоль красным цветом сообщит непременно.

Исчерпывающий список зарезервированных слов здесь.

Фух! Имена тоже посмотрели, ключевое для себя определили, пошли дальше.

Знак = - это не знак равенства, как мы привыкли со школы, это оператор присвоения. Операторы равенств и неравенств мы рассмотрим в блоке операторы.

С помощью оператора присвоения, мы, собственно и присваиваем значение переменной.

После оператора присвоения указываются данные, которые хранятся в ячейке памяти, на которую ссылается ваша покорная слуга - переменная.

Форма с коротким тестом на переменные JavaScript

Ух! Закрутили, так закрутили! Дальше-больше!

О том, какие данные хранятся в переменной можно узнать указав оператор typeof перед значением или именем переменной, хранящей значение.

А что с этими можно\нужно делать, знакомимся далее, в разделах примитивы и объекты.

Last updated