Ho dovuto scrivere una routine che incrementa il valore di una variabile di 1 se il suo tipo è number
e assegna 0 alla variabile se non, dove la variabile è inizialmente null
o undefined
.Perché `null> = 0 && null <= 0` ma non` null == 0`?
La prima implementazione è stata v >= 0 ? v += 1 : v = 0
perché ho pensato che non un numero avrebbe reso falsa un'espressione aritmetica, ma è stato errato poiché null >= 0
è stato valutato come true. Poi ho appreso 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 è 0. null == 0
è risultata falsa. Ciò rende falsa l'espressione apparentemente tautologica (v >= 0 && v <= 0) === (v == 0)
.
Perché lo null
è uguale a 0, sebbene non sia effettivamente 0?
Egli sta parlando di Javascript. Il tuo esempio è in PHP. Nell'operatore PHP == confronta i valori in un modo speciale. Puoi fare alcuni confronti davvero pazzi come "10" == "1e1" (che è vero). Se si utilizzava l'operatore ===, si otterrebbe un risultato completamente diverso perché controlla se il tipo corrisponde e anche il valore. Controlla questo link: http://www.php.net/manual/en/language.operators.comparison.php – Pijusn
L'operatore PHP "==" funziona davvero in modo "speciale". –
Se il tuo requisito era iniziare a contare a 1 invece che a 0, c'è un modo davvero esatto per incrementare i contatori inizialmente "nullo" o "non definito": 'c = - ~ c // Risultati in 1 per null/non definito; incrementi se già un numero ' –