¿Qué es la Coerción en Javascript?

¿Coer… qué? Coerción, bonito palabro.
Coerción se podría definir como la acción de forzar a un objeto a que se comporte como si fuera de otro tipo.
Como Javascript es un lenguaje débilmente tipado y dinámico no necesitamos especificar el tipo de dato para las variables porque el tipo está asociado al valor y no a la variable (Duck typing).
La ventaja es que podemos comprobar la existencia de un objeto mediante su valor por lo que Javascript permite implementar de forma muy sencilla algunos principios OOP (Object Oriented Programming) como sobrecargas de metodos (overload), sobreescritura de métodos (override) y polimorfismo.
Por ejemplo podemos ver en los siguientes ejemplos cómo funciona la coerción entre distintos tipos:
var var1, // -> undefined
var2 = 9;
if (v1) { } // -> undefined se evalúa como false
if (v2) { } // -> 9 se evalúa como true
if (!v1) { } // -> al negar undefined, se evalúa como true
if (!v2) { } // -> al negar 9, se evalúa como false
var v3 = !!v1; // -> convierte explícitamente undefined a false
var v4 = !!v2; // -> convierte explícitamente 9 a true
// asigna 0 si la coerción v1 es false
v1 = v1 || 0;
// ejecuta el alert si la coerción de v2 es true
v2 && alert("Hey!");
n = +"13"; // 13, type: number
n = +"0"; // 0, type: number
n = +"5px"; // NaN, type: number

Conclusión
La coerción es una de esas características de JavaScript que deberíamos conocer, de modo que entendamos correctamente los fragmentos de código y evitemos cometer errores de lógica, que suelen ser por lo general, bastante difíciles de rastrear.