важливі замітки
Тут значення не виявилося ненавмисно. Мабуть, просто ще не прийшов час дати цієї змінної значення.
null потрібен для явного, навмисного вказівки, що значення немає. Можна сказати let a = null ;. Наприклад, ви попросили користувача ввести інформацію, але він нічого не ввів. В такому випадку доречно записати в результат null.
null. на відміну від undefined. можна задавати вручну, передавати як аргумент у функцію і в цілому використовувати як будь-яке інше явне значення.
При порівнянні null і undefined потрібно бути обережним:
У цьому курсі ми порівнюємо дані, використовуючи три знака рівності:
Це порівняння пряме: чи є ці дані абсолютно ідентичними?
конспект уроку
NaN означає «не число", але тип цього значення - number.
Мінлива без значення має спеціальне значення undefined. Тип такої змінної - undefined:
Динамічна та статична типізація
Код конвертується в іншу форму, яку комп'ютер може запустити. Цей процес називається компіляцією, а період часу, за який цей процес відбувається - стадією компіляції (compile time).
Після того, як компіляція закінчена, запускається програма і період, поки вона запущена, називається стадією виконання (run time).
Статично типізовані мови перевіряють типи і шукають помилки типізації на стадії компіляції.
Динамічно типізовані мови перевіряють типи і шукають помилки типізації на стадії виконання.
Іншими словами: статичне тіпізірованія значить перевірку типів перед запуском програми; динамічне - перевірку типів, поки програма запущена.
Слабка і сильна типізація
опціонально
транскрипт уроку
В одному з минулих уроків ми говорили про помилки і як з ними справлятися. Є кілька видів помилок, і я хочу нагадати про один конкретний вид. Ось невеликий фрагмент того уроку:
Погляньте на цей код:
Помилка типізації - це як просити кішку випрати білизну. Можливо, ви хотіли попросити про це вашого друга.
typeof - це спеціальний оператор, який повертає рядок, в якій написаний тип.
А що, якщо создадать змінну, але не поставити їй ніякого значення? Який в цьому випадку буде тип? Це ні число, ні рядок, ніщо. Тому що немає значення, правильно?
Наприклад, тип number має безліч потенційних значень: 1, 2, -10, 69000 та інші числа. А тип undefined тільки одне - undefined.
Коли справа стосується типізації в програмуванні, важливо розрізняти дві концепції: динамічна проти статичної і слабка проти сильної.
Щоб розуміти різницю між динамічної та статичної типізацією, нам спочатку потрібно подивитися як написані програми стають запущеними програмами.
Код, який ви пишете, зазвичай конвертується в зрозумілу для запуску комп'ютером форму. Цей процес називається компіляцією, а проміжок часу, за який це відбувається - "стадією компіляції" або compile time.
Після того, як компіляція закінчена і програма запущена, починається відлік часу, який називається "стадією виконання" або run time.
Деякі мови перевіряють типи і шукають помилки типізації на стадії компіляції. У них статична типізація.
Інші мови перевіряють типи і шукають помилки типізації на стадії виконання. Така типізація - динамічна.
Іншими словами: статична типізація означає перевірку типів перед запуском програми, динамічна - перевірку типів, коли програма запущена.
C #, C ++, Java, Go - статично типізовані мови. Якщо в одному з цих мов ви створите число і спробуєте проводити з ним операції, як з функцією, ви отримаєте помилку під час компіляції, а програма не стане запускатися - вона навіть не дійде до цієї стадії, тому що помилка типізації буде виявлена перед виконанням, в період компіляції.
Динамічна типізація не гірше і не краще статичної. Обидва способи мають свої переваги і недоліки. Динамічно типізовані мови зазвичай простіше вивчати і писати на них програми, але, як ви можете уявити, це потенційно збільшує помилки і баги.
У цій концепції немає нічого спільного з динамічної та статичної типізацією, сенс яких - КОЛИ перевіряти типи. Сильна проти слабкої - це НАСКІЛЬКИ СЕРЙОЗНО перевіряти типи.
Ви можете вважати, що слабка - це нестрогая типізація, а сильна - це вимоглива.
На відміну від динамічності-статичності, сила типізації це спектр. У PHP типізація трохи сильніше. У Python ще сильніше. І всі вони динамічно типізовані мови.
Можна припустити, що неявна конверсія з типу в тип - не найкраща ідея. Неявний, значить прихований, а прихований - значить важко зрозумілий і схильний до помилок. Поведінка програми стає менш очевидним. Ви пишіть менше коду, так, але код більш крихкий і менш зрозумілий.