2020
30 featuresThe #! comment at the absolute start of a script or module is treated as a normal comment and is ignored by the JavaScript engine.
Mutable global variables are importable and exportable.
The fill-opacity, and stroke-opacity SVG attributes and CSS properties control the transparency of a stroke or fill of an SVG element.
The WEBGL_compressed_texture_etc extension for WebGL 1.0 and 2.0 contexts adds many ETC2 and EAC compressed texture formats to compressedTexImage2D() and compressedTexSubImage2D().
The WEBGL_compressed_texture_etc1 extension for WebGL 1.0 and 2.0 contexts adds the ETC1 compressed texture format to compressedTexImage2D() and compressedTexSubImage2D().
The font-optical-sizing CSS property sets whether text rendering is optimized for viewing at different sizes.
The EXT_sRGB extension for WebGL 1.0 contexts adds sRGB support to textures and framebuffer objects.
The getVideoPlaybackQuality() method of HTMLVideoElement returns metrics that can be used to determine the playback quality of a video, such as how many frames were dropped.
The ::placeholder CSS pseudo-element selects help text in <input> and <textarea> elements when no value is set.
The :focus-within CSS pseudo-class matches an element if the element or any of its children are focused.
The :indeterminate CSS pseudo-class selects any form element whose state is indeterminate, such as checkboxes that have been set to an indeterminate state with JavaScript, or radio buttons which are members of a group in which all radio buttons are unchecked.
The :placeholder-shown CSS pseudo-element selects <input> and <textarea> elements when no value is set and the element's placeholder attribute is not empty. Not to be confused with ::placeholder, which selects the placeholder text itself.
The :scope CSS pseudo-class matches the scoping root, for instance the element that querySelector() is called on, or the root of a DOM subtree specified with @scope.
The <bdi> element isolates text that may have a different text direction from its surrounding text. This prevents the browser's bidirectional text algorithm from affecting or being affected by the direction of the surrounding text.
The <details> element is a disclosure widget which can be expanded to reveal additional content. When closed, only the nested <summary> element is visible.
The <embed> element represents an external resource such as a PDF or SVG document. It was historically used for plugins such as Shockwave Flash.
The rel="preconnect" attribute for the <link> HTML element is a hint to the browser that the page or user is likely to request resources from another origin, so the browser should preemptively start a connection to the href value's origin.
The <slot> HTML element is a placeholder inside a web component where consumers of the component can insert their own markup.
The clip-path property can be animated using CSS transitions and animations.
The flat() and flatMap() methods for arrays creates a new array such that each nested array item is concatenated into it.
Async generator functions (async function*) create iterators that return multiple promises, one after another, on-demand.
Asynchronous iterator objects, such as those returned by promises or generator functions, are iterable with the for await .. of loop.
Autonomous custom elements are HTML elements with a hyphenated tag name (like <example-element>) that have behaviors you define.
The CSS.escape() static method escapes a string so that it can be used in a valid CSS selector.
The CSS.supports() static method returns whether the browser supports a CSS declaration (given by two arguments, a property and value) or an @supports at-rule condition string.
The i identifier in a CSS attribute selector matches attribute values case-insensitively in document languages like XML where attribute values are case-sensitive.