In theory, the difference between the terms is easy to define:
An abstraction exists between two things (A and B) if there is a third thing (C) between them. A and B are abstracted from each other by C.
An indirection (or dereference) occurs if a thing, A is not directly referenced by another thing, B but is instead indirectly referenced through thing C.
Notice any similarity between them? When expressed in such loose terms, they are synonymous. So it's easy to define the difference: there is none. But folk like to have them mean different things and that's where the problems arise.
Indirection is a term that's been used since the dawn of CPU instruction sets (or at least since the Z80 CPU in the early 80's, which is where I first came across it) to refer to using registers to specify an address, rather than the absolute address itself. The term is also commonly used for offsets, such as an index into an array, where the address of the start of the array plus the index, give the absolute address of the element.
But both of these are abstractions too though. We are abstracting the address, rather than directly accessing it. But it's unusual to find people referring to these as abstractions.
Abstraction is a term commonly used in OOP to refer to interfaces and abstract types. Here we are putting an abstraction layer (in the form of an abstract type) between the caller and callee. But that also means we are indirectly referencing the callee; we have an indirection. Again, it's unusual to find people referring to this as indirection though (except in the case of inheritance, where that abstraction is often called indirection).
So in summary, abstraction and indirection are fundamentally the same thing. Folk like to use the terms as if they were different, but because they aren't really different, you'll come across many conflicting definitions of the difference.
So you have a choice: view them as the same thing, or pick a definition of the terms that seeks to differentiate them and stick with that. Either way, just be aware that other folk may have picked a different meaning of the terms to you and so confusion may occur when you try to discuss the terms.
One final point, as you refer to JavaScript. If within the JavaScript community, there exists a consensus on strict definitions of these terms, then when using JavaScript stick to those. I don't believe there is such a consensus, but that may be due to ignorance on my part. The fact you ask this question lends weight to there being a lack of consensus though.