Мені довелося написати процедуру, яка збільшує значення змінної на 1, якщо її тип є, numberі присвоює 0 змінній, якщо ні, де початкова змінна nullабо undefined.
Перша реалізація полягала в v >= 0 ? v += 1 : v = 0тому, що я вважав, що що-небудь не число зробить арифметичний вираз помилковим, але це було неправильним, оскільки null >= 0його оцінюють як істинне. Тоді я дізнався, що nullповодиться як 0, і наступні вирази оцінюються як істинні.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
Звичайно, nullне 0. null == 0оцінюється як хибне. Це робить начебто тавтологічний вираз (v >= 0 && v <= 0) === (v == 0)помилковим.
Чому дорівнює null0, хоча насправді це 0?
nullабо undefined:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined- значення змінної для змінних, які не були ініціалізовані. null, з іншого боку, це порожнє значення об'єкта, і його не слід змішувати з цифрами. nullне слід поєднувати з числами, тому null не повинен поводитись як числа.