Published originally on Medium
Like most languages, we have multiple versions of the language. The language, the new features, and future are determined by a technical committee, called TC-39.
- ES6 is equal to ES2015
- ES7 is equal to ES2016
- And so on…
- ESNEXT refers to the next upcoming version and related suggestions.
Once a suggestion went through all stages, TC-39 will eventually reject or accept the suggestion and add it to the ECMAScript specification.
- V8: Created by Google
- SpiderMonkey: Created by Mozilla
- Chakra: Created by Microsoft
An engine has its own versioning, a new version of an engine might bring performance improvements and/or support for new ES features.
# Single and Multi Thread
If you are confused, read about Concurrency vs Parallelism.
# WEB APIs
You might have used in your past, Web APIs like “GeoLocation”, “Fetch”, “Gamepad”, or more likely “Document”. These are APIs which are an interface to your browser. Your browser, let that sink in for a moment. The browser is responsible to make sure that those APIs exist in your global scope.
When you do something like
document.getElementById() , the browser made that
document object and
getElementById() method available to you, because you are interacting with parts of the web page or the browser (e.g. when you use
navigation.userAgent ). The browser is also responsible for the implementation.
document object does not exist when you execute your code in NodeJS, because the code is not executed in a browser.
Some of the WEB APIs though are mimicked in NodeJS, a good example for that is the
console.log() API. But the implementation is very different, in the browser
console.log() will print to your developer console, in NodeJS this would print to
stdout by default.
So when you see something coming out of thin air, like
document.getElementById() while you did not explicitly import these objects or methods (e.g.
import console from 'console' or
const console = require('console') ) your working most likely with an API that was included by the runtime environment, being the browser or NodeJS. This is not done by the engine.
Note: The engine itself can (but it’s rare) also introduce some APIs itself, an example is
# Edit: iOS 3rd party browsers all need to use WebKit.