Its development tools are a decade or more behind those of Java and C++.
It's worse than just being behind. Behind is a solvable problem. Basic IDE features like auto-completion/typo checking are impossible for the IDE when the content of an object can't be known until run-time. Consider a simple example that uses a random number to either define a given property on an object or not - the IDE fundamentally cannot know whether than property should show up in its autocomplete list. So I think the poor quality of the tools can also be blamed on poor JS design. JSDoc provides reasonable solution to this problem at the cost of writing a bunch of documentation that would be pedantic in other languages and negates weak types (not enforced unfortunately). I compare this to documenting every "int foo = 0;" in C++ with a comment saying "//this is an integer".
Ultimately, I feel the lesson comes down to this: Weakly-typed languages are for smaller projects than strongly-typed languages.
Unfortunately, if you need to do something in a browser you don't really have a strongly typed option right now. That is also a solvable problem, and as the browser becomes more and more important as a platform someone will solve it. Though, if you'd have asked me 10 years ago I'd have at least expected to be able to see the solution on the horizon by this point.