Hola derkenuke y Helena:
Pongo énfasis en que se trata de un operador lógoco (tal como pone el título)... y lo que me extraña es que se pueda operar con valores no-lógicos, en lenguajes compilados seguro que no colaría, u obligaría a parsearlos... algo así como ((boolean) 15 || (boolean) 15.5)
Sobre el array con índice booleano sería para comprobar si se obtienen resultados lógicos:
<script>
var bool = new Array();
bool[false] = "falso";
bool[true] = "cierto";
document.write("<br />" + bool[10 || true]);
document.write("<br />" + bool[true || 10]);
document.write("<br />" + bool[10 || false]);
document.write("<br />" + bool[false || 10]);
document.write("<br />" + bool[10 && true]);
document.write("<br />" + bool[true && 10]);
document.write("<br />" + bool[10 && false]);
document.write("<br />" + bool[false && 10]);
</script>
Sobre el uso de la operación bit a bit, me acuerdo que en el viejo ms-dos, el bit más significativo en los colores se usaba para la intermitencia, y se conseguía haciendo el OR 1000000 y se quitaba con AND 0111111...
Una buena utilidad es el encriptamiento: usando el operador XOR con una clave se consigue una cadena ilegible, pero aplicándo una segunda vez esa misma operación con la misma clave se consigue la cadena original.
Saludos