2010-12-22 12 views
17

Estoy mirando un libro para html 5 e incluye este tid bit de js. ¿Qué significa doble exclamación?doble exclamación en un valor de retorno en javascript

return ! ! document.createElement('video').canPlayType; 
+4

Me encanta, doble negativos útiles en la programación de idiomas. Y mi maestra de inglés dijo que nunca usa doble negativo. "No quiero hacer nada". se convierte en una oración que quizás tenga sentido ahora. :) –

+1

Puedo ser una idea intentar primero buscar Stackoverflow antes de preguntar. http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – KooiInc

+1

perdón por eso. Hice una búsqueda en "javascript de doble exclamación" No se detuvo nada. – steve

Respuesta

20

El operador ! niega, y el secundario ! niega el resultado de la negación inital. Esto básicamente teclea lo que está en el lado derecho en un booleano (verdadero o falso).

!false // true 
!!false // false 

lo tanto, si se define la forma entonces el function que es Truthy, será typecasted en true.

document.createElement('video').canPlayType 

Así que lo anterior devuelve una función. No queremos una función, queremos un booleano explícito, por lo que lo negamos dos veces y dado que function no es falso (0, nulo, falso, cadena vacía, NaN), se devuelve verdadero para los navegadores que admiten este método.

!!document.createElement('video').canPlayType // true 

Si no se admite el método, el navegador volverá undefined. !undefined es verdad, y !true es falso, por lo !!document.createElement('video').LOL regresará false

+0

no 'document.createElement ('video'). CanPlayType' ¿devuelve un booleano? ¿O es para si eso es 'nulo' y luego' !! (nulo) = falso'? – hunter

+0

!! (null) == falso –

+0

@hunter - document.createElement ('video'). CanPlayType devolverá indefinido si el navegador no admite la etiqueta de video. –

9

El doble signo de exclamación es un truco JavaScript para volver verdadero/falso independientemente de la entrada. En su ejemplo, si un navegador no es compatible con la etiqueta de video, volverá indefinido. ! indefinido es verdad. Entonces, indefinido es falso. Si el navegador admite video, se devolverá verdadero. !! verdad también es verdad. Esto le ahorra tener que manejar el caso de indefinido.

Cuestiones relacionadas