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

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

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

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

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

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

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

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

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

  • объекты.

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

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

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

let redBox = "cookies"

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

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

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

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

  • const

  • let

  • var

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

свойствоCONSTLETVAR

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

блочная

блочная

глобальная

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

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 нельзя использовать в качестве имени переменной, об этом даже консоль красным цветом сообщит непременно.

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

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

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

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

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

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

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

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

Last updated