¿Por qué la respuesta es 42?

Estoy tratando de entender cómo esta expresión de palíndromo da 42. Conozco las reglas de precedencia del operador, pero esto está más allá de mi nivel actual de Javascript. ¿Cómo puedo empezar?

alert ("The answer is " +

[(0>>(0==0))+([0]+[(0==0)+(0==0)]^0)]*[(0^[(0==0)+(0==0)]+[0])+((0==0)<<0)]

);