En general: simplemente funciona de manera normal pero no guarda el resultado.
A su ejemplo: Esa es una técnica de programación defensiva que protege su código de punteros nulos y problemas similares. En este caso, evita que la callback
de callback
se use como referencia de función si obviamente no es una. Tiene formas equivalentes en otros idiomas, pero las conversiones de tipo implícito de Javascript lo hacen muy compacto.
Si se usa una expresión en un contexto booleano, Javascript tratará el resultado como un valor booleano, incluso si su tipo es realmente otra cosa. Los valores tratados como true
se llaman “veraces”; los valores equivalentes a false
son ” false
“. Todo el proceso se llama coerción de tipo.
- ¿Cómo pueden los componentes React que se cargan a pedido?
- ¿Se puede contratar a un aspirante a desarrollador web si solo conoce HTML y CSS?
- ¿Qué es un webhook?
- ¿Cómo elige un marco de plantillas Java para complementar Spring MVC entre JSF, Tiles, Velocity, Freemarker, Sitemesh y Thymeleaf?
- ¿Cuál es la mejor empresa de diseño web en Chicago?
Esto es lo que sucede en tu ejemplo:
-
&&
crea un contexto booleano -
callback
es verdadera si su valor no es falso, indefinido, 0, “”, NaN o nulo.Function
no es falsa, por lo que una referencia de función pasará bien. - Si es falso, la declaración de cortocircuitos y
callback(i)
nunca se ejecuta, útil si hubiera causado un error. Si lacallback
es verdadera, se supone que es una referencia de función y se usa para llamar a una función.
Tenga en cuenta que no hay nada que impida que sea true
o que -40
&&
el &&
. Este tipo de verificación funciona mejor en una situación en la que sabe que si un valor es verdadero, lo más probable es que sea una referencia de función y es poco probable que sea otra cosa.
Aquí hay una forma equivalente de escribir su ejemplo:
if (callback) { // coerces callback into a boolean callback(i); // may not be safe }
Un cheque mucho más seguro pero no equivalente sería:
// Don't call callback unless it's definitely a function if (typeof callback === 'function') { callback(i); // guaranteed safe }