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
   40   41   42   43   44   45   46   47   48   49   50