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