Honestly I don't hate the language itself that much (I'm just learning it though so who knows) but developing with it fucking sucks. First npm installs a thousand dependencies, then you have to use it to install an entirely different package manager (yarn) and hope it works.
If you're using npm, you install a package or two that you're working with and get 10+ vulnerabilities. It tells you to run "npm audit fix" so you do it, but it just lists the vulnerabilities again and tells you to run "npm audit fix", so apparently you're just stuck with those.
Then you try running your react app and it crashes with an error about failing to stat a random file in your home directory. It turns out that you mistyped an import, and instead of giving an error about that it recursively backs up and checks every single file to see if it's the one it's looking for. Cool.
As a dev who has done a ton of work with JS, JavaScript fucking sucks!
For anything running in the browser, opt for Typescript whenever possible...but even that is gilding the JS turd. So many stupid design decisions plague JS...which TS, being built upon the same pile of dogshit, cannot fix.
The whole web ecosystem is fucked, especially the JS stack. Using Node these days practically requires tooling like Webpack, Babel, & React...which adds so much overhead to getting something simple off the ground.
I wish web browsers offered first-class support for better languages. WebAssembly looks like it might help, but it's still not mature.
I only use JS/TS anymore because:
I'd like to see analogous JSX-like syntaxes built for other languages, especially Rust & Python. I'd never touch the JS/TS/Node ecosystem ever again if Rust had a JSX-like syntax and I could compile PWAs to WebAssembly and easily serve it.
Despite all my complaints, I am very glad NPM nags you about vulnerabilities. I'd like to see that information when installing deps from PyPi, Crates.io, etc. because I'm sure they're also littered with tons of active vulns, but get less attention because it's not displayed by default.
All package managers should make that info as visible as NPM...both for language-specific & OS package managers. I know you can do this with pacman hooks, but it would be huge to make it default, esp for apt.