¿Hay alguna razón para usar !!someValue
(que es equivalente a Boolean(someValue)
) en un contexto booleano ? En otras palabras, en situaciones como if (someValue) ...
, ¿tiene sentido escribir if (!!someValue) ...
?
Me duele la vista y creo que es redundante, pero quiero verificar que no haya casos extremos que lo requieran, porque encontré una base de código donde esta parece ser la forma predeterminada de verificar la veracidad.
Aclaración: sí, en el caso general !!someValue
convertirá someValue
en un booleano; Me refiero a contextos en los que el tiempo de ejecución convertirá automáticamente someValue
en true
o false
.
Esa es una forma útil de convertir cualquier tipo de datos en booleanos; El sinónimo exacto sería:
Boolean(someValue)
Algunos prefieren el 'doble golpe' por ser más preciso, mientras que otros prefieren la conversión clásica con Boolean(someValue)
para una mejor legibilidad.
Entonces, volviendo a su pregunta, lo más probable es que sea redundante en las condiciones, pero puede ser útil cuando se necesita una conversión de cualquier tipo a booleano.
No puedo decir que sepa por qué alguien confiaría en verificar directamente los booleanos en lugar de en la veracidad, ¡pero hay al menos un escenario en el que la veracidad es diferente a la coerción con !!
.
console.log([] == false); // true console.log(!![] == false); // false if([]) { console.log(true); } // true if([] == false) { console.log(true); } // true if(!![] == false) { console.log(true); } else { console.log(false); } // false
Nunca necesita usar un doble golpe para convertir un valor booleano a booleano.
boolean === !!boolean