Данные и переменные
JavaScript слаботипизированный (с динамической типизацией) язык программирования
Слабая типизация языка обусловлена 2мя основными чертами:
возможность изменять (переназначать) значение переменной;
приведение типов (изменение типа данных) у значения.
Во-первых, всё, что нас окружает, это в первую очередь данные!
Данные описывают сущности, их свойства и действия над ними.
В JavaScript данные разделены на 2 больших семейства:
примитивные данные;
объекты.
Во-вторых, данные занимают собой пространство - ячейку памяти.
Для возможности обращения к данным и работы с ними создаются переменные - абстракции - по имени (идентификатору) которых, мы обращаемся к ячейке с данными и можем с ними взаимодействовать.
Это как мы именуем различные емкости и упаковки, благодаря которым можем хранить и брать предметы: `Дай-ка мне вон ту красную коробку с печеньем !`
А теперь давайте рассмотрим, почему 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 нельзя использовать в качестве имени переменной, об этом даже консоль красным цветом сообщит непременно.
Исчерпывающий список зарезервированных слов здесь.
Фух! Имена тоже посмотрели, ключевое для себя определили, пошли дальше.
Знак =
- это не знак равенства, как мы привыкли со школы, это оператор присвоения.
Операторы равенств и неравенств мы рассмотрим в блоке операторы.
С помощью оператора присвоения, мы, собственно и присваиваем значение переменной.
После оператора присвоения указываются данные, которые хранятся в ячейке памяти, на которую ссылается ваша покорная слуга - переменная.
Ух! Закрутили, так закрутили! Дальше-больше!
О том, какие данные хранятся в переменной можно узнать указав оператор typeof
перед значением или именем переменной, хранящей значение.
А что с этими можно\нужно делать, знакомимся далее, в разделах примитивы и объекты.
Last updated