What to reach for now, what to retire, and the sharp edges still worth avoiding.

Still Earning Their Keep

Crockford's original list has aged unevenly. Closures, first-class functions, and prototype delegation are still foundational — but the language has grown better parts on top of them. Destructuring, optional chaining (?.), nullish coalescing (??), and Array methods like flatMap and at() are genuinely good additions that belong in your everyday vocabulary. So does structuredClone, which quietly replaced a dozen janky deep-copy workarounds.

async/await deserves its place on the good-parts list too — not because it hides complexity, but because it maps to how developers actually reason about sequential async work. The event loop is still underneath, still surprising people, but the syntax at least stops fighting you.

Modules are finally a settled story. Native ESM in browsers, type: "module" in Node, and consistent tooling support from Vite and esbuild mean you can write import/export without apology and ship something that works.

What to Retire

var has no remaining use case. arguments is superseded by rest parameters. Callback-first APIs (fs.readFile(path, cb)) still exist in Node's legacy surface, but nothing new should be written that way. jQuery-style DOM gymnastics are folklore; the platform's querySelector, classList, and fetch are capable and boring in the best way.

Avoid == — not because you'll always get it wrong, but because the coercion rules are a tax on readers. === costs nothing extra to type. Similarly, eval and with are still in the spec and still traps.

The Sharp Edges That Remain

this still bites. It is consistent if you understand the binding rules, but those rules interact badly with callbacks, class methods, and arrow functions in non-obvious ways. Know them; don't assume.

Floating-point arithmetic hasn't changed. 0.1 + 0.2 !== 0.3 is forever. For money or precision work, use a library or integer arithmetic.

And the part people forget: the standard library is still thin. No native date arithmetic worth trusting, no decimal type, limited data structures. Temporal is coming, but it isn't everywhere yet. Until it is, reach for small, well-maintained utilities rather than rolling your own.

The language is genuinely better than it was — just know which decade each feature belongs to.