Para qué nos vale la comprobación con doble negación en JavaScript
Como sabéis JavaScript y su esquema de "tipado débil" permite la ejecución de ciertas instrucciones que de entrada puede parecer un poco raras tales como a===b o !!value, son expresiones que ciertamente no estamos acostumbrados a ver en lenguajes tipo c# o vb... Básicamente se debe a que internamente JavaScript realiza las conversiones de tipos (próximamente escribiré sobre este tema).
- Al evaluar expresiones en JavaScript, este convierte automáticamente la expresión en un valor booleano. Es decir: 'true' == true
- Cuando usamos una negación (por ejemplo: !true ) realmente lo que estamos haciendo es convertir en booleano e invertir/negar el valor evaluado, es decir !true == false o esta expresión !'true' == false. (ambas expresiones, devuelven true, ya que convierte a booleano y evalúa la expresión)
- Cuando evaluamos expresiones, no hace falta comparar contra un booleano. Es decir, no hace falta que hagamos esto if (success == true) simplemente podemos hacer esto: if (success)
Entonces, una doble negación en JavaScript es...
Una doble negación en JavaScript, realmente lo que hace es con el primer símbolo de exclamación, convierte a booleano y niega (o invierte) la expresión y con la segunda exclamación, lo vuelves a negar (invertir) y obtienes el valor original convertido a booleano.Con este post quería dejar claro los posibles resultados al utilizar la doble negación en base a lo que se este evaluando, así que a continuación veréis una tabla de resultados en base a diferentes valores evaluados:
Instrucción | Resultado | Comentario |
---|---|---|
!!false |
false
| //false es falso |
!!true |
true
| //true es verdadero |
!!0 |
false
| //0 es falso |
!!1 |
true
| //1 es verdadero |
!!-1 |
true
| //-1 es verdadero |
!!2 |
true
| //2 se toma como objeto y al no ser undefined, es verdadero |
!!3 |
true
| //3 se toma como objeto y al no ser undefined, es verdadero |
!!parseInt("test") |
false
| //NaN es falso |
!!(vacio) |
false
| //empty es falso |
!!"no vacio" |
true
| //las cadenas no vacias al no ser undefined son verdaderas |
!!"0" |
true
| //"0" al ser una cadena se toma como verdadero |
!!undefined |
false
| //(undefined) es falso |
!!null |
false
| //(null) es falso |
!!{a:1,b:2} |
true
| //(object) es verdadero |
!!{} |
true
| //todos los objetos son verdaderos |
!![] |
true
| //un array tambien es un objeto, con lo que es verdadero |
Podéis ver esto en ejecución en el siguiente ejemplo:
0 comentarios :
Publicar un comentario