¿Qué significa una expresión sin asignación?

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.

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 la callback 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 }