There always will be good and bad parts in everything, mostly, because it always depends on perspective from which people are judging a subject, their past experience, preferences and expectations.
JavaScript is a simple and powerful language. The problem with any technology is - people don't want to understand the culture of the technology itself, which is a very important part of it which can't be ignored.
Because of that we see today so many overcomplicated things. People ignoring the language itself and trying to use it in a wrong way by simulating "classes" and "interfaces" from other languages like Java. This will never work.
People blaming JavaScript for being JavaScript. It IS a weak typed language with prototypes, without classes and which is designed to script the browser with simple API and to be used by people without strong knowledge of software engineering and programming languages.
People blaming JavaScript for their own commands they give to the language. For example immutability is not fault of the language, it is fault of the engineer. Moreover in JS there is an Object.freeze() and people are using libraries for that task...
There are many other languages and platforms around. If you don't want to understand the culture and you don't like the language, it is not language's problem, it is yours.
You can write great modern applications, you can write simple, maintainable code in vanilla JavaScript if you will:
Master with a needle may achieve more then a student with a sword.
Nothing is perfect in the real life and never will be. You can't change what is around you, but you only can adapt and change yourself.
Even if ES6 was a major upgrade in the language for many years, it doesn't eliminated all the bad parts and never will be. Highest-level and flexible languages are always a trade-off. What you can do is to contribute to the ECMAScript standard discussion and development.
The only true bad parts in the JavaScript are the minds of bad engineers.