
1. Частина, де ми говоримо про JS
1.1. Змінні
1.1.1. Змінна - це коробка з тим що в неї поклали
1.1.2. Оголошення та присвоєння
1.1.3. Іменування змінних має декілька правил:
1.1.3.1. Ім'я змінної може містити тільки букви, цифри та символи '$' і '_'.
1.1.3.2. Перший символ не має бути цифрою
1.1.3.3. Регістр має значення. 'let user' та 'let User` - це різні змінні
1.1.3.4. Існують зарезервовані слова які не можна використовувати як назви змінних:
1.1.3.4.1. let
1.1.3.4.2. class
1.1.3.4.3. return
1.1.3.4.4. function
1.1.4. Серед розробників є прийняті практики іменування
1.1.4.1. Використовуйте зрозумілі імена
1.1.4.2. Уникайте абревіатур та коротких імен в один символ
1.1.4.3. 'Самодокументований код' - чудові імена максимально описові та лаконічні
1.1.4.3.1. Такий код економить час, нерви та ресурси команди
1.1.4.4. Краще створити нову змінну ніж перевикорситати вже існуючу
1.1.4.5. Дотримуйтесь домовленостей щодо іменування в команді
1.1.4.5.1. BTW, ось найрозповсюдженіші регісти в JS:
1.1.5. гнучка 'let'
1.1.6. стабільна 'const'
1.1.7. Застаріла 'var' і її проблеми
1.1.7.1. не має блочної області видимості
1.1.7.2. допускає повторне оголошення
1.1.7.3. допускає переприсвоєння
1.1.7.4. оголошення обробляються на початку скрипта
1.1.7.4.1. але не присвоєння
1.1.8. Q&A
1.2. Типи даних
1.2.1. Для чисел є 'number'
1.2.1.1. Приклад: let studentsCount = 11;
1.2.1.2. Є спеціальні числові значення:
1.2.1.2.1. Infinity
1.2.1.2.2. -Infinity
1.2.1.2.3. NaN
1.2.1.3. Є ліміти: від -9007199254740991 до 9007199254740991
1.2.1.4. Математичні операції не валять виконання скрипта
1.2.2. Для довільних цілих чисел є bigint
1.2.2.1. Не має лімітів
1.2.2.2. Приклад: const maxAmmount = 2444666668888888123456789012345678901234567890n;
1.2.3. Для тексту є 'string'
1.2.3.1. Приклад: const helloMessage = 'Hello there!';
1.2.3.2. Можна використовувати '', "", ``
1.2.3.2.1. Приклад: const user = 'John'; const helloMessage = `Hello ${user}`;
1.2.4. Для булевих значень є 'boolean'
1.2.4.1. Приклад: const toBe = true;
1.2.5. Для комплексних значень є 'object'
1.2.5.1. Приклад: let lastMessage = { fromUserId: 4521485, toUser: 4756418, timeStamp: 151614444315, text: 'Where are you?' };
1.2.5.2. Має підвиди:
1.2.5.2.1. Для впорядкованих колекцій є 'Array'
1.2.5.2.2. Для дат є 'Date'
1.2.5.2.3. Для функцій є 'function'
1.2.6. Для створення унікальних ідентифікаторів є `symbol`
1.2.7. Для специфічних значень є `null` та `undefined`
1.2.7.1. `null` використовується коли значення порожнє: let tasks = null;
1.2.7.2. `undefined` використовується коли значення немає: let tasks; console.log(tasks) // undefined
1.2.8. Для перевірки типу змінної є метод 'typeof x' Він повертає назву типу
1.2.8.1. Або typeof(x)
1.2.8.1.1. Для null буде повертати 'object', бо це одна з дитячих хвороб
1.2.9. Q&A
1.3. Оператори
1.3.1. Математичні
1.3.1.1. додавання '+' віднімання '-' множення '*' ділення '/' залишок від цілочисленного ділення '%' ступінь '**' інкремент '++' декремент '--'
1.3.2. Порівняння
1.3.2.1. Більше/менше '<', '>'
1.3.2.2. Більше/менше чи дорівнює >=,<=
1.3.2.3. Дорівнює/не дорівнює '==', '!='
1.3.2.4. Суворе дорівнює/не дорівнює '===', '!=='
1.3.3. Логічні
1.3.3.1. Логічне 'І' '&&'
1.3.3.1.1. оператор && та присвоєння
1.3.3.2. Логічне 'АБО' '||'
1.3.3.2.1. оператор || та присвоєння
1.3.3.3. Логічне 'НЕ' '!'
1.3.4. Специфічні
1.3.4.1. приведення до буллевого значення '!!'
1.3.4.2. кома ','
1.3.4.3. присвоєння '='
1.3.4.4. інкремент '++' декремент '--'
1.3.4.4.1. Інкремент/декремент можна використовувати двома способами - перед змінною та після
1.3.5. Побітові
1.3.6. Пріоритет виконання
1.3.7. Нульовий оператор об’єднання '??'
1.3.8. Q&A
1.4. Перетворення примітивних типів
1.4.1. Явні перетворення
1.4.1.1. перетворення в number
1.4.1.1.1. функція Number()
1.4.1.1.2. функція parseInt()
1.4.1.1.3. оператор +
1.4.1.1.4. тут в деталях про відмінності: https://thisthat.dev/number-constructor-vs-parse-int/
1.4.1.2. перетворення в string
1.4.1.2.1. метод .toString()
1.4.1.2.2. функція String()
1.4.1.2.3. додавання порожньої строки
1.4.1.3. перетворення в boolean
1.4.1.3.1. оператор !!
1.4.1.3.2. функція Boolean()
1.4.1.3.3. В false перетворюються: false undefined null NaN 0 ""
1.4.1.3.4. все інше - в true
1.4.1.4. перетворення в bigint
1.4.1.4.1. функція BigInt()
1.4.2. Перетворення в операціях
1.4.2.1. в математичних операціях
1.4.2.1.1. true стає 1
1.4.2.1.2. null стає 0
1.4.2.1.3. undefined стає 'NaN'
1.4.2.1.4. string...
1.4.2.1.5. bigint...
1.4.2.2. в логічних операціях
1.4.2.2.1. 0, null, undefined, NaN, "" - перетворюються в `false`
1.4.2.2.2. Всі інші значення - в `true`
1.4.2.3. давайте перевіримо
1.4.3. Q&A
1.5. Специфічні моменти
1.5.1. Є нюанс щодо 'копіювання' значень змінних
1.5.2. специфічні комбінації операторів та типів
1.5.3. Q&A
2. Епілог
2.1. Екстра матеріали
2.1.1. Про відмінності між типами змінних: https://www.freecodecamp.org/news/var-let-and-const-whats-the-difference/
2.1.2. Про нульовий оператор злиття: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
2.1.3. Таблиця пріоритетів операторів: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#table
2.1.4. Побітові оператори: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise_operators
2.2. Тизер-трейлер наступного вебінару
2.2.1. знову Q&A