Tuve que escribir una rutina que incrementa el valor de una variable en 1 si su tipo es number
y asigna 0 a la variable de no ser así, donde la variable es inicialmente null
o undefined
.¿Por qué `null> = 0 && null <= 0` pero no` null == 0`?
La primera implementación fue v >= 0 ? v += 1 : v = 0
porque pensé que cualquier cosa que no fuera un número haría que una expresión aritmética fuera falsa, pero estaba mal, ya que null >= 0
se evalúa como verdadero. Entonces aprendí que null
se comporta como 0 y las siguientes expresiones se evalúan como verdaderas.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1/null === Infinity
Math.pow(42, null) === 1
Por supuesto, null
no es 0. null == 0
se evalúa a falso. Esto hace que la expresión aparentemente tautológica (v >= 0 && v <= 0) === (v == 0)
sea falsa.
¿Por qué null
tiene 0, aunque en realidad no es 0?
Él está hablando de Javascript. Tu ejemplo está en PHP. En PHP, el operador == compara los valores de una manera especial. Puedes hacer algunas comparaciones realmente locas como "10" == "1e1" (que es verdad). Si utilizó el operador ===, obtendría un resultado completamente diferente porque verifica si el tipo coincide con el valor. Verifique este enlace: http://www.php.net/manual/en/language.operators.comparison.php – Pijusn
El operador PHP '==' realmente funciona de una manera "especial". –
Si su requisito era comenzar a contar en 1 en lugar de 0, hay una manera muy lata de incrementar los contadores que son inicialmente 'null' o' undefined': 'c = - ~ c // Resultados en 1 para null/undefined; incrementos si ya existe un número ' –