• 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 updated