¿Por qué usar if (!! err)?

En este ejemplo de código de los documentos sequlize :

if (!!err) { console.log('Unable to connect to the database:', err) } else { console.log('Connection has been established successfully.') } 

¿Por qué están usando (!!err) para probar la verdad de ese err? ¿No es lo mismo que if (err) ?

¿Por qué están usando (!!err) para probar la verdad de ese err?

No hay razón. ¿Tal vez son demasiado prudentes, después de haber escuchado algunas cosas equivocadas sobre la ruindad? ¿O quieren enfatizar el ToBoolean que ocurre en la evaluación de la condición if ?

¿No es lo mismo que if (err) ?

Sí.

 if (err) if (Boolean(err)) if (!! err) 

todos significan exactamente lo mismo. Los dos últimos solo hacen pasos innecesarios antes de llegar al mismo resultado.

El signo de exclamación doble convierte cualquier cosa en la representación booleana de esa expresión, ya sea verdadera o falsa en el sentido de valor booleano

O

Convierte un no booleano a un booleano invertido

por ejemplo, definir una cadena

 var vari = "something"; 

y verificar su equivalente booleano

 console.log(!!vari); 

Por qué parte de ti Pregunta

El autor o el escritor pueden estar por encima de Precocious para verificar la existencia del error. O tenga una comprobación adicional de que alguien no está pasando una expresión en lugar de un error que deba verificarse como booleano. En ambos sentidos, está haciendo lo mismo, así que le expliqué lo que significa que no necesita preocuparse acerca de por qué ahora, ya que son la misma intención de los autores, pueden ser

!! La intención generalmente es transmitir al lector que al código no le importa qué valor tiene la variable, sino cuál es su valor de “verdad”.

Como Bhojendra – C-Link Nepal dio ejemplo

 err = 'This is also to be a true if you convert it to boolean'; if(!!err == 1){ console.log('test by converting to boolean'); } if(err == 1){ console.log('a real boolean test'); } 

uno se considera verdadero, pero “esta oración” no es igual a 1, por lo que es cierto todavía uno si el bloque se ejecutará en el código anterior

Realmente importa lo mismo.

¡Pero espera! Es algo muy diferente cuando utilizamos para probar verdadero o falso:

 err = 'This is also to be a true if you convert it to boolean'; if(!!err == 1){ console.log('test by converting to boolean'); } if(err == 1){ console.log('a real boolean test'); } //outputs only: test by converting to boolean 

Pero un valor booleano real registra ambos como en el siguiente ejemplo:

 err = true; if(!!err == 1){ console.log('test by converting to boolean'); } if(err == 1){ console.log('a real boolean test'); } 

Entonces, el signo de exclamación doble se usa para convertir a booleano solamente.

Entonces, la gente usa la condición para asegurarse de que el valor sea en booleano o no y, si no es así, conviértalo y compruébalo, pero si desea verificar estrictamente si es cierto o no, entonces lo comparará usando 1 === 1 y en el ejemplo anterior, exactamente lo mismo se aplica.

Pero al igual que en su código, if(!!err){ se usa para asegurarse de que es falso o verdadero debido a la falta de conocimiento profundo de que if(err){//string incluso se puede marcar como verdadera o falsa.

Eso es. El cheque exacto está hecho por !! .