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