Ho dovuto scrivere una routine che incrementa il valore di una variabile di 1 se il suo tipo è number
e assegna 0 alla variabile in caso contrario, dove la variabile è inizialmente null
o undefined
.
La prima implementazione è stata v >= 0 ? v += 1 : v = 0
perché pensavo che qualcosa di diverso da un numero non avrebbe reso falsa un'espressione aritmetica, ma era errata poiché null >= 0
è stata valutata come vera. Quindi ho imparato che null
si comporta come 0 e le seguenti espressioni sono tutte valutate come vere.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1 / null === Infinity
Math.pow(42, null) === 1
Naturalmente, null
non null == 0
è 0. viene valutato come falso. Ciò rende (v >= 0 && v <= 0) === (v == 0)
falsa l' espressione apparentemente tautologica .
Perché è null
come 0, anche se in realtà non è 0?
null
o undefined
:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined
è un valore variabile, per le variabili che non sono state inizializzate. null
d'altra parte, è un valore di oggetto vuoto e non deve essere miscelato con numeri. null
non dovrebbe essere combinato con numeri, quindi null non dovrebbe comportarsi come numeri.