2012-06-10 7 views
5

¿Existe alguna ventaja, excepto indicar una conversión explícita, en utilizar un operador double not en JavaScript? A menudo parece que en estos días, a las personas les gusta comprobar la existencia de nuevas API utilizando el doble no, pero nunca, nunca, le he leído ninguna ventaja.double no (!!) vs coerción de tipo en JavaScript

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

Lo único que he leído es que es una forma concisa, oscuro para escribir fundido a boolean, sin embargo, cuando se usa en este contexto, el objeto se auto coaccionado a booleano de todos modos ya estamos comprobando a ver si está definido.

En resumen, ¿por qué las personas hacen dos operaciones booleanas en la parte superior del motor?

+0

Como lo demuestra el enlace, globalmente realiza una conversión a booleano. Aquí está principalmente destinado a hacer que el código sea más legible, lo que significa que solo se necesita el valor booleano. –

+0

¡¡Sé exactamente lo que es !! pseudo operador, eso no es lo que pregunté. – Vreenak

+2

No hay un uso real, es un mal hábito tener legibilidad de pretexto. –

Respuesta

7

Realmente no veo ninguna razón para hacerlo en contexto como usted presente. No afectará el resultado de ninguna manera.

La única vez que vería esto como una buena idea es si está construyendo una función que se supone devuelve un valor de bool, y necesita convertirlo de algún otro valor, por ejemplo ...

function isNotFalsy(val) { return !!val; } 

El ejemplo puede ser un poco forzado, pero se entiende. Siempre querrá asegurarse de que el valor de retorno sea del tipo que el usuario esperaría.

+0

Aceptado como el mejor, quisiera señalar @Pointy algunas API pueden ===/typeof para requerir valores booleanos. – Vreenak

1

No necesita utilizar !! dentro de una expresión if.
Se está utilizando convertir el valor a booleano, y if lo hace de forma predeterminada.

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

Gracias por responder, pero sé esto. La pregunta era si hay alguna ventaja de usarla en una declaración if, ya que es una práctica común. – Vreenak

+2

@watkinsj. Creo que contesté esa pregunta en la primera línea ... – gdoron

+0

Has dicho que no es necesario. Lo señalé en la pregunta. No veo ninguna respuesta en cuanto a las ventajas o explicaciones de su proliferación dentro de la declaración if. – Vreenak