isnan - string to number javascript
¿Es nulo considerado cero e indefinido, no un número en expresiones aritméticas? (3)
¿Se evalúa null
en 0
y undefined
en NaN
en expresiones aritméticas?
Según algunas pruebas, parece que sí:
> null + null
0
> 4 + null
4
> undefined + undefined
NaN
> 4 + undefined
NaN
¿Es seguro o correcto suponer esto? (una cita de una documentación sería A +).
¿Se evalúa nulo en 0 y no está definido en NaN en expresiones aritméticas? ¿Es seguro o correcto suponer esto?
Sí lo es. Una "expresión aritmética" usaría la operación ToNumber
:
Argument Type | Result
--------------+--------
Undefined | NaN
Null | +0
… |
Se usa en las siguientes expresiones "aritméticas":
- incremento y decremento de prefijo / postfijo
- los operadores unarios
+
y-
- el operador
+
si ninguno de los dos argumentos es una cadena - operación de resta , multiplicación, división y módulo
- operadores relacionales si no ambos argumentos son cadenas
No es utilizado por los operadores de igualdad , por lo que null == 0
es falso (y null !== 0
todos modos)!
Parece seguro suponerlo ya que, en una expresión aritmética ( por ejemplo, adición ), se llamaría al método ToNumber , evaluando NaN
y +0
desde undefined
y null
respectivamente:
To Number Conversions
╔═══════════════╦════════════════════════════════════════════╗
║ Argument Type ║ Result ║
╠═══════════════╬════════════════════════════════════════════╣
║ Undefined ║ NaN ║
║ ║ ║
║ Null ║ +0 ║
║ ║ ║
║ Boolean ║ The result is 1 if the argument is true. ║
║ ║ The result is +0 if the argument is false. ║
║ ║ ║
║ Number ║ The result equals the input argument (no ║
║ ║ conversion). ║
║ ║ ║
║ String ║ See grammar and note below. ║
║ ║ ║
║ Object ║ Apply the following steps: ║
║ ║ 1. Let primValue be ToPrimitive(input ║
║ ║ argument, hint Number). ║
║ ║ 2. Return ToNumber(primValue). ║
╚═══════════════╩════════════════════════════════════════════╝
Especificación del lenguaje ECMAScript - ECMA-262 Edition 5.1
Sin ser obligado a escribir,
null == false == 0
null !== false !== 0
http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN#0_6
Dicho esto, null == 0
, null + 4 = 4
Espero que esto ayude.