En JavaScript es habitual encontrarse de vez en cuando con código que tiene alguna cosa que no entiendes o no recuerdas para qué era. Al menos a mí me pasa.
Vamos a ver el caso de la doble negación, hace poco me he topado con esto y me sonaba mucho haber mirado ya en otras ocasiones para qué servía.
Buscando documentación vi que hace tiempo ya había escrito un post donde comentaba la doble negación, concretamente en el post Las cosas más raras que verás en JavaScript.
Qué es la doble negación
La doble negación transforma cualquier valor a su correspondiente valor booleano true o false. Parece raro, pero tiene su sentido:
- la primera negación transforma cualquier valor truthy en false y falsy en true
- la segunda negación niega el resultado del paso anterior
La doble negación no es un operador, son simplemente dos operaciones de negación seguidas.
Con ejemplos se entiende mejor:
// primera negación: transforma el 10 (truthy) en false // segunda negación: transforma false en true !!10 // 10 -> true // primera negación: transforma undefined (falsy) en true // segunda negación: transforma true en false !!undefined // undefined -> false
Una forma más clara de hacer lo mismo
Una vez visto lo anterior, ¿se entiende verdad? Bien. Buena suerte para recordarlo. Yo estoy convencido que en unos meses me volverá a pasar lo mismo, me toparé con algo así y no recordaré qué hacía la doble negación.
¿Por qué pasa esto? Pues en mi caso porque no la uso nunca. En mi opinión, una forma más clara de hacer esto es la siguiente:
Boolean(10) // true Boolean(undefined) // false
El constructor Boolean nos va a crear un booleano a partir del valor que le pasemos. Hay quién dirá que la doble negación es más concisa y compacta, totalmente respetable. Yo me quedo con esta segunda forma.