From "You Don't Know JS: Types & Grammar"
🎧 Listen to Summary
Free 10-min PreviewJavaScript's Foundational Principles and Ecosystem Management
Key Insight
JavaScript's specification is managed by TC39, a technical steering committee composed of 50 to 100 volunteers from major web-invested companies, including browser makers like Mozilla, Google, and Apple, and device makers such as Samsung. TC39 oversees the language's official specification, which defines its syntax and behavior and is formalized by ECMA, the standards organization. Proposals for language enhancements progress through a 0-based, five-stage process (Stage 0 through Stage 4); Stage 4 proposals are eligible for inclusion in the next yearly revision, with the entire process spanning several months to a few years and managed openly on TC39's GitHub repository, though only members vote in meetings.
A fundamental guiding principle of JavaScript is strict backwards compatibility, ensuring that any code once accepted as valid JS will continue to work in future versions. This means code written in 1995, however primitive, should still execute today, providing developers confidence that browser updates will not unpredictably break their programs. This commitment, spanning nearly 25 years, places a significant burden on the language's evolution, as decisions are effectively permanent and mistakes cannot easily be removed. While rare, minor backwards-incompatible changes are sometimes made after extensive study of existing web code to estimate impact, with browsers ultimately deciding if the benefits outweigh the small-scale breakage.
Conversely, JavaScript is not forwards-compatible, meaning newer language features will cause errors or crashes when run in older JS engines. This contrasts with declarative languages like HTML and CSS, which are forwards-compatible and simply skip unrecognized declarations. To address this gap, developers rely on transpiling, using tools like Babel to convert modern JavaScript syntax (e.g., `let` declarations) into older, equivalent forms. Additionally, polyfilling (or 'shimming') provides definitions for newer API methods (e.g., `Promise.prototype.finally()`) in environments where they are natively absent. Both transpiling and polyfilling are crucial techniques in the JavaScript development pipeline, enabling the use of current stable features while maintaining support for older environments.
📚 Continue Your Learning Journey — No Payment Required
Access the complete You Don't Know JS: Types & Grammar summary with audio narration, key takeaways, and actionable insights from Kyle Simpson.