Ich musste eine Routine schreiben, die den Wert einer Variablen um 1 erhöht, wenn ihr Typ ist, numberund der Variablen 0 zuweist, wenn nicht, wo die Variable anfänglich ist nulloder undefined.
Die erste Implementierung war, v >= 0 ? v += 1 : v = 0weil ich dachte, dass alles, was keine Zahl ist, einen arithmetischen Ausdruck falsch machen würde, aber es war falsch, da null >= 0es als wahr ausgewertet wird. Dann habe ich gelernt, dass es nullsich wie 0 verhält und die folgenden Ausdrücke alle als wahr ausgewertet werden.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
Natürlich nullist nicht 0. null == 0wird als falsch bewertet. Dies macht den scheinbar tautologischen Ausdruck (v >= 0 && v <= 0) === (v == 0)falsch.
Warum ist nullwie 0, obwohl es eigentlich nicht 0 ist?
nulloder undefined:c = -~c // Results in 1 for null/undefined; increments if already a number
undefinedist ein Variablenwert für Variablen, die nicht initialisiert wurden. nullist andererseits ein leerer Objektwert und sollte nicht mit Zahlen gemischt werden. nullsollte nicht mit Zahlen kombiniert werden, daher sollte sich null nicht wie Zahlen verhalten müssen.