Do compilers of high programming languages always compile them directly to machine code?
I've seen compilers that compile directly to object code. 

I've seen compilers that compile to assembler code. 

I've seen compilers that compile to byte code for a virtual machine. 

I've seen compilers that compile to bit code which is intended to be further compiled to code for slightly different processors. 

I've seen compilers that compile to a different language. 

I've seen compilers for Javascript specifically that start interpreting code, then compile it very quickly to not very good code, then compile it carefully to reasonably good code, then compile it with a highly optimising compiler to very fast code, all depending how often some code is executed.