Page 31 - 6105
P. 31
undefined. Інтуїтивно здається, що null / undefined еквівалентні нулю, але це не так.
Вони ведуть себе по-іншому. Значення null і undefined рівні == один одному і не
рівні чомусь іншому. Це жорстке правило буквально прописано в специфікації
мови. При перетворенні в число null стає 0, а undefined стає NaN. Це призводить
до цікавих наслідків.
Некоректний результат порівняння null з 0
Порівняємо null з нулем:
alert (null> 0); // false
alert (null == 0); // false
Отже, ми отримали, що null не більше і не дорівнює нулю. А зараз…
alert (null> = 0); // true
Як таке можливо? Якщо щось «більше або дорівнює нулю», то резонно
вважати, що воно або більше, або дорівнює. Але тут це не так.
Справа в тому, що алгоритми перевірки рівності == і порівняння > => <<=
працюють по-різному.
Порівняння рівності призводить до числа, виходить нуль. А при перевірці
рівності значення null і undefined обробляються особливим чином: вони
дорівнюють один одному, але не рівні чомусь ще.
В результаті виходить дивна з точки зору здорового глузду ситуація, яку ми
бачили в прикладі вище.
Непорівнюваний undefined
Значення undefined взагалі не можна порівнювати:
alert (undefined> 0); // false (1)
alert (undefined <0); // false (2)
alert (undefined == 0); // false (3)
30