Ho dovuto scrivere una routine che incrementa il valore di una variabile di 1 se il suo tipo è numbere assegna 0 alla variabile in caso contrario, dove la variabile è inizialmente nullo undefined.
La prima implementazione è stata v >= 0 ? v += 1 : v = 0perché 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 nullsi comporta come 0 e le seguenti espressioni sono tutte valutate come vere.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
Naturalmente, nullnon null == 0è 0. viene valutato come falso. Ciò rende (v >= 0 && v <= 0) === (v == 0)falsa l' espressione apparentemente tautologica .
Perché è nullcome 0, anche se in realtà non è 0?
nullo 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. nulld'altra parte, è un valore di oggetto vuoto e non deve essere miscelato con numeri. nullnon dovrebbe essere combinato con numeri, quindi null non dovrebbe comportarsi come numeri.