I would say that ES6+ JavaScript has dependency injection natively.
Modules are singletons that when imported or required are injected into the current module.
In practice this works just like dependency injection in other languages like Java and C# just at the modules level instead of the class level.
There are great tools for mocking modules e.g. proxyquire