Official website ECMA-262 Specification | Github Active proposals Finished proposals
Official standard name of the language originally appearing in browsers. "Javascript" is the implementation of the language that appeared in the Netscape Navigator browser.
Implementations
- Native: WebKit JavaScriptCore: the JavaScript engine that comes as part of the larger open-source WebKit browser core.
- C/C++: mjs Embedded JavaScript for C/C++, designed for microcontrollers with limited resources. Implements a strict subset of ES6.
- C/C++: QuickJS: a small and embeddable Javascript engine. It supports the ES2020 specification including modules, asynchronous generators, proxies and BigInt.
- C/C++: V8: The engine below NodeJS from Google.
- CLR: jint
- CLR: Yantra (Source): Compiles JavaScript to .Net Assembly; Strict Mode Only JavaScript; Subclassable built-ins; Module support; Optional property chain
identifier?.[]
, identifier?.(
, identifier?.identifier
; Many ES5 + ES6 features; CommonJS Module Support; Easily marshal CLR Object to JavaScript and other way around; CSX Module support; Mixed module system, YantraJS supports require
and import
.
- CLR: Jurassic: Jurassic is an implementation of the ECMAScript language and runtime. It aims to provide the best performing and most standards-compliant implementation of JavaScript for .NET. Jurassic is not intended for end-users; instead it is intended to be integrated into .NET programs. If you are the author of a .NET program, you can use Jurassic to compile and execute JavaScript code.
- CLR: IronJS
- Go: Elsa | HN: Fast/secure QuickJS wrapper in Go
- JVM: Nashorn: Nashorn Blog is at Oracle but Nashorn appears to have moved to JetBrains ownership/development here
- JVM: Rhino (includes E4X support)
- JVM: Graal.js part of GraalVM
- JVM: RingoJS (Source)
- JVM: Kotlin: Reeva
- Rust: Deno
- Rust: Boa
- Zig: Bun (Source): a fast all-in-one JavaScript runtime
Implementation-related
Module systems
- Asynchronous Module Definition API (AMD)
- r.js: A command line tool for running JavaScript scripts that use the Asynchronous Module Definition API (AMD) for declaring and using JavaScript modules and regular JavaScript script files. It is part of the RequireJS project, and works with the RequireJS implementation of AMD.
Transpilers
List of languages that compile to JS
FFI bindings
To any JS engine (not direct FFI)
- nbind: a set of headers that make your C++11 library accessible from JavaScript.
Tierless
- Fun: A programming language for realtime webapps - compiles to client-side and server-side JS.
- Ur: In the tradition of ML and Haskell.
- mobl: The new language for programming the mobile web.
- E: Compiles E to JS. E is a secure distributed persistent pure object language.
- Sugar: New programming language designed to replace JavaScript for client-side (and server-side) web development
- Opa: Write your complete application in just one language, and the compiler will transform it into a self-sufficient executable
- STIP.js: Slicing Tierless Programs in JavaScript
Other JS-related implementations
Other JS-related language-related libraries
Reading
SingleEscapeCharacter
- Airbnb JavaScript Style Guide - Airbnb (HTML)
- Automatic semicolon insertions in JavaScript
- Basic JavaScript for the impatient programmer - Dr. Axel Rauschmayer (HTML)
- Book of Modern Frontend Tooling - Various (HTML)
- Building Front-End Web Apps with Plain JavaScript - Gerd Wagner (HTML,PDF)
- Clean Code JavaScript - Ryan McDermott (HTML)
- Code as Data
- Create Your Own JavaScript Runtime
- Crockford's JavaScript - Douglas Crockford (HTML)
- Deep JavaScript: Theory and techniques - Dr. Axel Rauschmayer (HTML)
- Designing Scalable JavaScript Applications - Emmit Scott (PDF+livebook)
- Dev Docs - Various (HTML)
- Ectype - bringing type safety (and more!) to vanilla JavaScript
- Eloquent JavaScript 3rd edition - Marijn Haverbeke (HTML, PDF, EPUB, MOBI)
- Empty Statement
- Exploring ES6 - Dr. Axel Rauschmayer (HTML)
- From Research Prototypes to Continuous Integration: Guiding the Design and Implementation of JavaScript
- Google JavaScript Style Guide - Aaron Whyte, Bob Jervis, Dan Pupius, Erik Arvidsson, Fritz Schneider, & Robby Walker (HTML)
- Human JavaScript - Henrik Joreteg (HTML)
- Implementing one feature set in two JavaScript engines
- JavaScript Allongé - Reginald Braithwaite (HTML)
- JavaScript and C++ in Node.js core
- JavaScript Bible - Danny Goodman (PDF)
- JavaScript Challenges Book - Tomás Corral Casas (HTML)
- JavaScript Closures
- JavaScript Enlightenment - Cody Lindley (HTML)
- JavaScript ES6 and beyond - Alberto Montalesi (PDF, epub)
- JavaScript For Cats - Maxwell Ogden (HTML)
- JavaScript for Impatient Programmers (ES2020 edition) - Dr. Axel Rauschmayer (HTML)
- JavaScript from ES5 to ESNext - Flavio Copes (PDF, EPUB, Kindle) (email address requested)
- JavaScript Fundamentals, Plus a Dash Of JQuery - for dinner ladies - Nicholas Johnson (HTML)
- JavaScript Garbage Collector
- JavaScript Garden Maintained by Tim Ruffles (HTML)
- JavaScript Interview #35 - Coderslang Master (PDF, email address requested, not required)
- JavaScript Memory management
- JavaScript Notes for Professionals - Compiled from StackOverflow documentation (PDF)
- JavaScript Patterns Collection - Shi Chuan (HTML)
- JavaScript Promises... in Wicked Detail
- JavaScript Spessore - Reginald Braithwaite (HTML)
- JavaScript Static Analysis for Evolving Language Specifications
- JavaScript Succinctly - Cody Lindley (PDF, Kindle; email address requested, not required)
- JavaScript the Right Way - William Oliveira & Allan Esquina (HTML)
- JS Robots - Mark Daggett (PDF) (:card_file_box: archived)
- Language learnings
- Leaflet Tips and Tricks: Interactive Maps Made Easy - Malcolm Maclean (HTML)
- Learning JavaScript Design Patterns - Addy Osmani (HTML)
- Let's Learn ES6 - Ryan Christiani (Superbook format)
- Managing Space and Time with JavaScript - Book 1: The Basics - Noel Rappin (dead link)
- Marionette Exposé: Learn to write modular Javascript applications using Backbone Marionette and RequireJS/AMD - Jack Killilea (HTML, PDF, EPUB, MOBI; Leanpub account or valid email requested)
- Mozilla Developer Network's JavaScript Guide - Mozilla Developer Network contributors (HTML)
- Neural Networks with JavaScript Succinctly - James McCaffrey (PDF, EPUB, MOBI)
- Oh My JS - Azat Mardanov (HTML)
- Patterns For Large-Scale JavaScript Application Architecture - Addy Osmani (HTML)
- Practical Modern JavaScript - Nicolas Bevacqua (HTML)
- Professor Frisby’s Mostly Adequate Guide to Functional Programming - Brian Lonsdorf (HTML)
- Relation of Garbage Collector and Closure in JavaScript
- Robust Client-Side JavaScript - Matthias Schäfer (HTML, EPUB)
- SICP in ECMAScript; see also js-slang, implementations of the Source languages, which are small sublanguages of JavaScript designed for SICP JS
- Single page apps in depth - Mixu (HTML)
- Speaking JavaScript - Dr. Axel Rauschmayer
- Static Hermes: the Next Generation of Hermes
- TC39 – From the proposal to ECMAScript - Step by Step
- The JavaScript Beginner's Handbook - Flavio Copes (PDF, EPUB, Kindle) (email address requested)
- The JavaScript Tutorial - Ilya Kantor (HTML)
- The JavaScript Way - Baptiste Pesquet
- The Problem with Native JavaScript APIs - Nicholas C. Zakas (PDF, email address requested)
- Thinking in JavaScript - Aravind Shenoy (Kindle)
- Understanding ECMAScript 6 - Nicholas C. Zakas (HTML)
- Understanding JavaScript OOP - Quil (HTML)
- Understanding the DOM — Document Object Model - Tania Rascia (PDF, EPUB)
- You Don't Know JS - Kyle Simpson (HTML, PDF, EPUB, MOBI)
Aurelia
Backbone.js
Booty5.js
D3.js
Dojo
Electron
Ember.js
Express.js
Fastify
Ionic
jQuery
Meteor
Next.js
Node.js
- An Introduction to libuv - Nikhil Marathe (PDF - ePub)
- From Containers to Kubernetes with Node.js - Kathleen Juell (PDF, EPUB)
- Full Stack JavaScript: Learn Backbone.js, Node.js and MongoDB - Azat Mardan
- How To Code in Node.js - eBook - David Landup, Marcus Sanatan @ Stack Abuse, Digital Ocean (PDF, EPUB)
- Introduction to Node.js (HTML)
- Mastering Node - visionmedia (PDF)
- Mixu's Node Book
- Module Patterns - Pedro Teixeira (HTML, PDF, EPUB, Kindle) (Leanpub account or valid email requested)
- Node Documentation
- Node: Up and Running - Tom Hughes-Croucher
- Node.js Notes for Professionals - Compiled from StackOverflow Documentation (PDF)
- Node.js Succinctly, Syncfusion (PDF, Kindle) (email address requested, not required)
- Practical Node.js: Building Real-World Scalable Web Apps - Azat Mardan
- The Node Beginner Book
- The Node.js Handbook - Flavio Copes (HTML, PDF) (email required for PDF)
Om
History
From the Specification home page, a history:
ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in that company's Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers from Microsoft starting with Internet Explorer 3.0.
ECMAScript 1
The development of the ECMAScript Language Specification started in November 1996. The first edition of this Ecma Standard was adopted by the Ecma General Assembly of June 1997.
ECMAScript 2
That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998. The Ecma General Assembly of June 1998 approved the second edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the second edition are editorial in nature.
ECMAScript 3
The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999 and published as ISO/IEC 16262:2002 in June 2002.
ECMAScript 4
also known as "The Version of ECMAScript We Don't Talk About"
After publication of the third edition, ECMAScript achieved massive adoption in conjunction with the World Wide Web where it has become the programming language that is supported by essentially all web browsers. Significant work was done to develop a fourth edition of ECMAScript. However, that work was not completed and not published as the fourth edition of ECMAScript but some of it was incorporated into the development of the sixth edition.
ECMAScript 5
also known as "Harmony" (as in, "Let's do something small to bring all the vendors back into harmony")
The fifth edition of ECMAScript (published as ECMA-262 5th edition) codified de facto interpretations of the language specification that have become common among browser implementations and added support for new features that had emerged since the publication of the third edition. Such features include accessor properties, reflective creation and inspection of objects, program control of property attributes, additional array manipulation functions, support for the JSON object encoding format, and a strict mode that provides enhanced error checking and program security. The fifth edition was adopted by the Ecma General Assembly of December 2009.
ECMAScript 5.1
the last version of "traditional" ECMAScript
The fifth edition was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262:2011. Edition 5.1 of the ECMAScript Standard incorporated minor corrections and is the same text as ISO/IEC 16262:2011. The 5.1 Edition was adopted by the Ecma General Assembly of June 2011.
ECMAScript 6
also known as "When ECMAScript finally got classes"
Focused development of the sixth edition started in 2009, as the fifth edition was being prepared for publication. However, this was preceded by significant experimentation and language enhancement design efforts dating to the publication of the third edition in 1999. In a very real sense, the completion of the sixth edition is the culmination of a fifteen year effort. The goals for this addition included providing better support for large applications, library creation, and for use of ECMAScript as a compilation target for other languages. Some of its major enhancements included modules, class declarations, lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns, and proper tail calls. The ECMAScript library of built-ins was expanded to support additional data abstractions including maps, sets, and arrays of binary numeric values as well as additional support for Unicode supplemental characters in strings and regular expressions. The built-ins were also made extensible via subclassing. The sixth edition provides the foundation for regular, incremental language and library enhancements. The sixth edition was adopted by the General Assembly of June 2015.
ECMAScript 2016
ECMAScript 2016 was the first ECMAScript edition released under Ecma TC39's new yearly release cadence and open development process. A plain-text source document was built from the ECMAScript 2015 source document to serve as the base for further development entirely on GitHub. Over the year of this standard's development, hundreds of pull requests and issues were filed representing thousands of bug fixes, editorial fixes and other improvements. Additionally, numerous software tools were developed to aid in this effort including Ecmarkup, Ecmarkdown, and Grammarkdown. ES2016 also included support for a new exponentiation operator and adds a new method to Array.prototype called includes.
ECMAScript 2017
ECMAScript 2017 introduced Async Functions, Shared Memory, and Atomics along with smaller language and library enhancements, bug fixes, and editorial updates. Async functions improve the asynchronous programming experience by providing syntax for promise-returning functions. Shared Memory and Atomics introduce a new memory model that allows multi-agent programs to communicate using atomic operations that ensure a well-defined execution order even on parallel CPUs. This specification also includes new static methods on Object: Object.values, Object.entries, and Object.getOwnPropertyDescriptors.
ECMAScript 2018
ECMAScript 2018 introduced support for asynchronous iteration via the AsyncIterator protocol and async generators. It also included four new regular expression features: the dotAll flag, named capture groups, Unicode property escapes, and look-behind assertions. Lastly it included rest parameter and spread operator support for object properties.
ECMAScript 2019
This specification, the 10th edition, introduces a few new built-in functions: flat and flatMap on Array.prototype for flattening arrays, Object.fromEntries for directly turning the return value of Object.entries into a new Object, and trimStart and trimEnd on String.prototype as better-named alternatives to the widely implemented but non-standard String.prototype.trimLeft and trimRight built-ins. In addition, this specification includes a few minor updates to syntax and semantics. Updated syntax includes optional catch binding parameters and allowing U+2028 (LINE SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) in string literals to align with JSON. Other updates include requiring that Array.prototype.sort be a stable sort, requiring that JSON.stringify return well-formed UTF-8 regardless of input, and clarifying Function.prototype.toString by requiring that it either return the corresponding original source text or a standard placeholder.
Tags:
language
browser
nodejs
dynamic
object
metaobject
Last modified 28 April 2025