Page 45 - 6105
P. 45
Значення null і undefined рівні "==" між собою, але ці значення не рівні
ніякому іншому значенню. Це веде до кумедних наслідків.
Наприклад, null не підкоряється законам математики - він «більше або
дорівнює нулю»: null> = 0, але не більше і не дорівнює:
alert (null> = 0); // true, тому що null перетвориться до 0
alert (null> 0); // false, тому що null перетвориться до 0
alert (null == 0); // false (і не дорівнює!), тому що ==
розглядає null особливо.
Значення undefined взагалі «непорівнюване»:
alert (undefined> 0); // false, тому що undefined -> NaN
alert (undefined == 0); // false, тому що це undefined (без
перетворення)
alert (undefined <0); // false, тому що undefined -> NaN
Для більш очевидної роботи коду і щоб уникнути помилок краще не давати
спеціальним значенням брати участь в операціях порівняння >> =, <<=.
Вв таких випадках доцільно використовувати змінні-числа або приводити їх до
числа явно.
Перетворення до true / false відбувається в логічному контексті, такому як if
(value), і при застосуванні логічних операторів.
Всі значення, які інтуїтивно «порожні», стають false. Їх кілька: 0, порожній
рядок, null, undefined і NaN. Усе інше, в тому числі і будь-які об'єкти - true.
Для явного перетворення використовується подвійне логічне заперечення !!
value або виклик Boolean (value).
Увага: рядок "0" стає true.
На відміну від багатьох мов програмування (наприклад PHP), "0" в
JavaScript є true, як і рядок з пробілів:
alert (!! "0"); // true
alert (!! ""); // будь непусті рядки, навіть з пробілів - true!
44