• No conventions.
  • Not standardized.
  • No consistency in online resources.
    • Lots of outdated online resources.
    • The fact that AirBNB has 20 pages on how to write JavaScript is insane.
  • No first class Enums
  • No types. Can be handled by Flow or TypeScript
  • Callback hell (work around with Promises, async and await, but its not supported everywhere)
  • Inconsisent: Array.length vs Set.size
    • Like wtf?
  • All the problems of a loosely typed language.
    • Hard to scale as a language, due to no types.
    • Hard to refactor.
  • Inconsistencies in coding style amongst the community
  • JS Modules are confusing
  • Requires high code coverage due to inconsistencies.
  • Changing babel flags can make your code run differently
    • Requires high code coverage to ensure it does as expected.
  • You need tools like lodash for basic stuff (bucketing items in in an array, groupBy)
  • Requires a lot of tooling to maintain JavaScript
  • Was design for client side browsing, not server side
  • It has both null and undefined
  • No native sprintf
  • Browser support is inconsistent.
  • Requires a lot of static analysis tools.
  • See Node.js's creator Ryan Dahl's "10 Things I Regret About Node.js"
What does this return?
"some string".match(/some regex/)
It's an Array with properties of index and input.
Things which increase the JavaScript environments complexity:
  • Requiring the use of new features via Babel
  • Requiring WebPack to bundle for frontend
  • Module systems
  • Inconsistent environments
    • Browser development, so many browser versions
    • Node, webpack vs everything else


Array.flat only works in Node.js 11+

Array.values() is different from Object.values()

Object.values(object) returns an array of values
array.values() returns an iterator

No easy way to test that two Sets are equal

new Set(['a', 'b']) == new Set(['b', 'a']); // false
Last modified 4yr ago