SlideShare a Scribd company logo
The future of Javascript
MiamiJS
@caridy
Evolution of JS
(21 years in the making)
TC39
TC39
Ecma Technical Committee 39
MiamiJS - The Future of JavaScript
TC39 - The ECMAScript Committee
What exactly is ECMAScript?
How is this related to JavaScript?
MiamiJS - The Future of JavaScript
Ecma Standard Documents
Ecma-262 (ECMAScript Language) → github.com/tc39/ecma262
Ecma-402 (ECMAScript Internationalization API) → github.com/tc39/ecma402
Ecma-404 (JSON)
How is this implemented by browsers?
DOM Javascript
DOM Javascript
Blink V8
Google Chrome
MiamiJS - The Future of JavaScript
Implementations of ECMAScript
SpiderMonkey → Servo (Mozilla)
V8 (Google)
Chakra (Microsoft)
JSCore (Apple)
...
Nashorn (Oracle)
…
https://en.wikipedia.org/wiki/ECMAScript#Implementations
What is the difference between those engines?
EcmaScript 1st to 5th Editions
ES1 = EcmaScript First Edition (1996-1997)
ES3 = EcmaScript 3rd Edition (1999)
⇶ function expressions, RegExp, try/catch/finally, switch, do-while
ES4 = RIP
ES5 = EcmaScript 5th Edition (2009)
⇶ "strict mode", getters and setters, JSON, reflection on object properties.
ES5 / 2009 - Compatibility Table
http://kangax.github.io/compat-table/es5/
ES2015 / 6th Edition
Features
EcmaScript 5th Edition (2015)
ES6 = ES2015 = ES6 Harmony
⇶ classes, modules, iterators, for/of loops, generators, arrow functions, collections, promises,
reflection, proxies, etc.
ES6/ES2015 - Compatibility Table
http://kangax.github.io/compat-table/es6/
ES2016 / 7th Edition
Features
ES7 = ES2016 (Submitted on March 1st, approved by TC39 last week, pending to be signed)
⇶ Array includes, exponential operator, and moving editorial process to github
Exponentiation Operator
Usage
// x ** y
let squared = 2 ** 2;
// same as: 2 * 2
let cubed = 2 ** 3;
// same as: 2 * 2 * 2
// x **= y
let a = 2;
a **= 2;
// same as: a = a * a;
let b = 3;
b **= 3;
// same as: b = b * b * b;
Prior Art
Python
math.pow(x, y)
x ** y
CoffeeScript
x ** y
Ruby
x ** y
Perl
x ** y
Lua, Basic, MATLAB, etc.
x ^ y
Array.prototype.includes
Illustrative Examples
assert([1, 2, 3].includes(2) === true);
assert([1, 2, 3].includes(4) === false);
assert([1, 2, NaN].includes(NaN) === true);
assert([1, 2, -0].includes(+0) === true);
assert([1, 2, +0].includes(-0) === true);
assert(["a", "b", "c"].includes("a") === true);
assert(["a", "b", "c"].includes("a", 1) === false);
Evolving any programing
language is hard, evolving
JavaScript is harder
Naming vs Backward Compatible Web
Array.prototype.includes
vs
Array.prototype.contains
MiamiJS - The Future of JavaScript
ES2017 / 8th Edition
Drafts
New Proposals
Next Edition of EcmaScript
ES8 = ES2017 (Current draft)
⇶ SIMD, async functions, Object.values/Object.entries, string padding, trailing commas in function
parameter lists and calls, rest/spread properties, shared memory and atomics, class and property
decorators, class property declarations, System.global, asynchronous iterators, realms and
frozen realms, etc.
Ecma-402 4th Edition (Current draft)
⇶ *.formatToParts, Intl.PluralRules, Intl.ListFormat, Intl.DurationFormat, Intl.UnitFormat,
Intl.RelativeTimeFormat, etc.
String Padding
String.prototype.padStart( maxLength [ , fillString ] )
String.prototype.padEnd( maxLength [ , fillString ] )
Example:
> "blahblah".padStart(10, "foo")
'ooblahblah'
> "blahblah".padStart(11, "foo")
'fooblahblah'
> "blahblah".padEnd(10, "foo")
'blahblahfo'
> "blahblah".padEnd(11, "foo")
'blahblahfoo'
SIMD
Single Instruction Single Data (SISD)
Single Instruction Multiple Data (SIMD)
1.0 2.0 3.0
1.0
3.0
5.0
7.0
2.0
4.0
6.0
8.0
3.0
7.0
11.0
15.0
Vector Processor
Trailing Function Commas
Rest Properties
Spread Properties
Shared Memory and Atomics
var w = new Worker("myworker.js")
var sab = new SharedArrayBuffer(1024); // 1KiB shared memory
w.postMessage(sab, [sab])
Decorators
class Person {
@readonly
name() { return `${this.first} ${this.last}` }
}
@isTestable(true)
class MyClass { }
function isTestable(value) {
return function decorator(target) {
target.isTestable = value;
}
}
Class Property Declarations
class MyClass {
myProp = 12;
static myStaticProp = 42;
constructor() {
console.log(this.myProp); // Prints '12'
console.log(MyClass.myStaticProp); // Prints '42'
}
}
System.global
Example of what we are seeing out there today to resolve the global reference:
Intl.RelativeTime
let a = new Intl.RelativeTimeFormat("en");
a.format(Date.now()); // yields "now"
a.format(Date.now() - 1000 * 60 * 60 * 25)); // yields "yesterday"
a.format(Date.now() - 1000 * 60 * 60 * 50)); // yields "2 days ago"
Intl.PluralRules
let o = new Intl.PluralRules("en");
o.select(0); // yields "other"
o.select(1); // yields "one"
o.select(1.5); // yields "other"
o.select(2); // yields "other"
EWM
EWM
Extensible Web Manifesto
Contributing to EcmaScript
We follow the “Champions” model
Annual “Train” Release
github.com/tc39
AMA Time
Ask Me Anything!
How can I use ES6/ES2015 today?
Transpilation of EcmaScript
Closure Compiler
By Google
github.com/google/closure-compiler
Sponsored By Facebook
github.com/babel/babel
Polyfills for EcmaScript
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
Polyfill Service By Financial Times
cdn.polyfill.io/
ES6 Shim (npm install es6-shim)
Can I use type annotations in JavaScript?
Type Annotations in EcmaScript
JavaScript that scales
By Microsoft
typescriptlang.org/
Sponsored By Facebook
flowtype.org/

More Related Content

What's hot (20)

PDF
Ns2: Introduction - Part I
Ajit Nayak
 
PDF
Add Some Fun to Your Functional Programming With RXJS
Ryan Anklam
 
PDF
Ns2: OTCL - PArt II
Ajit Nayak
 
PDF
JavaScript - new features in ECMAScript 6
Solution4Future
 
PPTX
Lenses
Brian Lonsdorf
 
PDF
An Intro To ES6
FITC
 
PDF
Coscup2021-rust-toturial
Wayne Tsai
 
PDF
Christian Gill ''Functional programming for the people''
OdessaJS Conf
 
PDF
Compose Async with RxJS
Kyung Yeol Kim
 
PDF
Introduction into ES6 JavaScript.
boyney123
 
PDF
Clojure: The Art of Abstraction
Alex Miller
 
PDF
Explaining ES6: JavaScript History and What is to Come
Cory Forsyth
 
PDF
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
 
PDF
Cascadia.js: Don't Cross the Streams
mattpodwysocki
 
PPTX
Groovy
Zen Urban
 
PDF
Coscup2021 - useful abstractions at rust and it's practical usage
Wayne Tsai
 
PDF
ES2015 (ES6) Overview
hesher
 
PDF
What they don't tell you about JavaScript
Raphael Cruzeiro
 
PDF
Introduction aux Macros
univalence
 
PDF
Better Software: introduction to good code
Giordano Scalzo
 
Ns2: Introduction - Part I
Ajit Nayak
 
Add Some Fun to Your Functional Programming With RXJS
Ryan Anklam
 
Ns2: OTCL - PArt II
Ajit Nayak
 
JavaScript - new features in ECMAScript 6
Solution4Future
 
An Intro To ES6
FITC
 
Coscup2021-rust-toturial
Wayne Tsai
 
Christian Gill ''Functional programming for the people''
OdessaJS Conf
 
Compose Async with RxJS
Kyung Yeol Kim
 
Introduction into ES6 JavaScript.
boyney123
 
Clojure: The Art of Abstraction
Alex Miller
 
Explaining ES6: JavaScript History and What is to Come
Cory Forsyth
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
 
Cascadia.js: Don't Cross the Streams
mattpodwysocki
 
Groovy
Zen Urban
 
Coscup2021 - useful abstractions at rust and it's practical usage
Wayne Tsai
 
ES2015 (ES6) Overview
hesher
 
What they don't tell you about JavaScript
Raphael Cruzeiro
 
Introduction aux Macros
univalence
 
Better Software: introduction to good code
Giordano Scalzo
 

Similar to MiamiJS - The Future of JavaScript (20)

PDF
JavaScript Futures—ES2017 and Beyond
Jeff Strauss
 
PDF
The Present and Future of the Web Platform
C4Media
 
PDF
Whats new in ES2019
chayanikaa
 
PDF
Fluent14
Brendan Eich
 
PPTX
Workshop JavaScript ES6+
Roy Derks
 
PDF
You Don t Know JS ES6 Beyond Kyle Simpson
gedayelife
 
PDF
ES2015 / ES6: Basics of modern Javascript
Wojciech Dzikowski
 
PDF
JavaScript Editions ES7, ES8 and ES9 vs V8
Rafael Casuso Romate
 
PDF
What's New in JavaScript
Dan Cohn
 
PDF
JS Responsibilities
Brendan Eich
 
PDF
Short intro to ECMAScript
Jussi Pohjolainen
 
PDF
Javascript the New Parts v2
Federico Galassi
 
PDF
Fitc whats new in es6 for web devs
FITC
 
PDF
What's New in ES6 for Web Devs
Rami Sayar
 
PDF
JavaScript in 2016
Codemotion
 
PPTX
JavaScript in 2016 (Codemotion Rome)
Eduard Tomàs
 
PPTX
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Modern JS with ES6
Kevin Langley Jr.
 
PDF
Javascript the New Parts
Federico Galassi
 
PDF
Advanced JavaScript Development
Jussi Pohjolainen
 
JavaScript Futures—ES2017 and Beyond
Jeff Strauss
 
The Present and Future of the Web Platform
C4Media
 
Whats new in ES2019
chayanikaa
 
Fluent14
Brendan Eich
 
Workshop JavaScript ES6+
Roy Derks
 
You Don t Know JS ES6 Beyond Kyle Simpson
gedayelife
 
ES2015 / ES6: Basics of modern Javascript
Wojciech Dzikowski
 
JavaScript Editions ES7, ES8 and ES9 vs V8
Rafael Casuso Romate
 
What's New in JavaScript
Dan Cohn
 
JS Responsibilities
Brendan Eich
 
Short intro to ECMAScript
Jussi Pohjolainen
 
Javascript the New Parts v2
Federico Galassi
 
Fitc whats new in es6 for web devs
FITC
 
What's New in ES6 for Web Devs
Rami Sayar
 
JavaScript in 2016
Codemotion
 
JavaScript in 2016 (Codemotion Rome)
Eduard Tomàs
 
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Modern JS with ES6
Kevin Langley Jr.
 
Javascript the New Parts
Federico Galassi
 
Advanced JavaScript Development
Jussi Pohjolainen
 
Ad

More from Caridy Patino (12)

PDF
CSP Level 2: Defensa en profundidad para aplicaciones Web
Caridy Patino
 
PDF
The rise of single-page applications
Caridy Patino
 
PDF
YUIConf2013: Introducing The "Modown" Project
Caridy Patino
 
PDF
FOWA2013: The rise of single page applications
Caridy Patino
 
PDF
FEDM Meetup: Introducing Mojito
Caridy Patino
 
PDF
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
Caridy Patino
 
PDF
YUIConf2012: Mojito for YUI Developers
Caridy Patino
 
PDF
BayJax: Expanding Yahoo! Axis across 3 screens
Caridy Patino
 
PDF
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
Caridy Patino
 
PDF
Conquistando el Servidor con Node.JS
Caridy Patino
 
PPT
JS Loading strategies
Caridy Patino
 
PPT
YUI 3 Loading Strategies - YUIConf2010
Caridy Patino
 
CSP Level 2: Defensa en profundidad para aplicaciones Web
Caridy Patino
 
The rise of single-page applications
Caridy Patino
 
YUIConf2013: Introducing The "Modown" Project
Caridy Patino
 
FOWA2013: The rise of single page applications
Caridy Patino
 
FEDM Meetup: Introducing Mojito
Caridy Patino
 
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
Caridy Patino
 
YUIConf2012: Mojito for YUI Developers
Caridy Patino
 
BayJax: Expanding Yahoo! Axis across 3 screens
Caridy Patino
 
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
Caridy Patino
 
Conquistando el Servidor con Node.JS
Caridy Patino
 
JS Loading strategies
Caridy Patino
 
YUI 3 Loading Strategies - YUIConf2010
Caridy Patino
 
Ad

Recently uploaded (20)

PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 

MiamiJS - The Future of JavaScript

  • 1. The future of Javascript MiamiJS
  • 3. Evolution of JS (21 years in the making)
  • 7. TC39 - The ECMAScript Committee
  • 8. What exactly is ECMAScript? How is this related to JavaScript?
  • 10. Ecma Standard Documents Ecma-262 (ECMAScript Language) → github.com/tc39/ecma262 Ecma-402 (ECMAScript Internationalization API) → github.com/tc39/ecma402 Ecma-404 (JSON)
  • 11. How is this implemented by browsers?
  • 15. Implementations of ECMAScript SpiderMonkey → Servo (Mozilla) V8 (Google) Chakra (Microsoft) JSCore (Apple) ... Nashorn (Oracle) … https://en.wikipedia.org/wiki/ECMAScript#Implementations
  • 16. What is the difference between those engines?
  • 17. EcmaScript 1st to 5th Editions ES1 = EcmaScript First Edition (1996-1997) ES3 = EcmaScript 3rd Edition (1999) ⇶ function expressions, RegExp, try/catch/finally, switch, do-while ES4 = RIP ES5 = EcmaScript 5th Edition (2009) ⇶ "strict mode", getters and setters, JSON, reflection on object properties.
  • 18. ES5 / 2009 - Compatibility Table http://kangax.github.io/compat-table/es5/
  • 19. ES2015 / 6th Edition Features
  • 20. EcmaScript 5th Edition (2015) ES6 = ES2015 = ES6 Harmony ⇶ classes, modules, iterators, for/of loops, generators, arrow functions, collections, promises, reflection, proxies, etc.
  • 21. ES6/ES2015 - Compatibility Table http://kangax.github.io/compat-table/es6/
  • 22. ES2016 / 7th Edition Features
  • 23. ES7 = ES2016 (Submitted on March 1st, approved by TC39 last week, pending to be signed) ⇶ Array includes, exponential operator, and moving editorial process to github
  • 24. Exponentiation Operator Usage // x ** y let squared = 2 ** 2; // same as: 2 * 2 let cubed = 2 ** 3; // same as: 2 * 2 * 2 // x **= y let a = 2; a **= 2; // same as: a = a * a; let b = 3; b **= 3; // same as: b = b * b * b; Prior Art Python math.pow(x, y) x ** y CoffeeScript x ** y Ruby x ** y Perl x ** y Lua, Basic, MATLAB, etc. x ^ y
  • 25. Array.prototype.includes Illustrative Examples assert([1, 2, 3].includes(2) === true); assert([1, 2, 3].includes(4) === false); assert([1, 2, NaN].includes(NaN) === true); assert([1, 2, -0].includes(+0) === true); assert([1, 2, +0].includes(-0) === true); assert(["a", "b", "c"].includes("a") === true); assert(["a", "b", "c"].includes("a", 1) === false);
  • 26. Evolving any programing language is hard, evolving JavaScript is harder
  • 27. Naming vs Backward Compatible Web Array.prototype.includes vs Array.prototype.contains
  • 29. ES2017 / 8th Edition Drafts
  • 31. Next Edition of EcmaScript ES8 = ES2017 (Current draft) ⇶ SIMD, async functions, Object.values/Object.entries, string padding, trailing commas in function parameter lists and calls, rest/spread properties, shared memory and atomics, class and property decorators, class property declarations, System.global, asynchronous iterators, realms and frozen realms, etc. Ecma-402 4th Edition (Current draft) ⇶ *.formatToParts, Intl.PluralRules, Intl.ListFormat, Intl.DurationFormat, Intl.UnitFormat, Intl.RelativeTimeFormat, etc.
  • 32. String Padding String.prototype.padStart( maxLength [ , fillString ] ) String.prototype.padEnd( maxLength [ , fillString ] ) Example: > "blahblah".padStart(10, "foo") 'ooblahblah' > "blahblah".padStart(11, "foo") 'fooblahblah' > "blahblah".padEnd(10, "foo") 'blahblahfo' > "blahblah".padEnd(11, "foo") 'blahblahfoo'
  • 33. SIMD Single Instruction Single Data (SISD) Single Instruction Multiple Data (SIMD) 1.0 2.0 3.0 1.0 3.0 5.0 7.0 2.0 4.0 6.0 8.0 3.0 7.0 11.0 15.0 Vector Processor
  • 36. Shared Memory and Atomics var w = new Worker("myworker.js") var sab = new SharedArrayBuffer(1024); // 1KiB shared memory w.postMessage(sab, [sab])
  • 37. Decorators class Person { @readonly name() { return `${this.first} ${this.last}` } } @isTestable(true) class MyClass { } function isTestable(value) { return function decorator(target) { target.isTestable = value; } }
  • 38. Class Property Declarations class MyClass { myProp = 12; static myStaticProp = 42; constructor() { console.log(this.myProp); // Prints '12' console.log(MyClass.myStaticProp); // Prints '42' } }
  • 39. System.global Example of what we are seeing out there today to resolve the global reference:
  • 40. Intl.RelativeTime let a = new Intl.RelativeTimeFormat("en"); a.format(Date.now()); // yields "now" a.format(Date.now() - 1000 * 60 * 60 * 25)); // yields "yesterday" a.format(Date.now() - 1000 * 60 * 60 * 50)); // yields "2 days ago"
  • 41. Intl.PluralRules let o = new Intl.PluralRules("en"); o.select(0); // yields "other" o.select(1); // yields "one" o.select(1.5); // yields "other" o.select(2); // yields "other"
  • 42. EWM
  • 44. Contributing to EcmaScript We follow the “Champions” model Annual “Train” Release github.com/tc39
  • 45. AMA Time Ask Me Anything!
  • 46. How can I use ES6/ES2015 today?
  • 47. Transpilation of EcmaScript Closure Compiler By Google github.com/google/closure-compiler Sponsored By Facebook github.com/babel/babel
  • 48. Polyfills for EcmaScript <script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script> Polyfill Service By Financial Times cdn.polyfill.io/ ES6 Shim (npm install es6-shim)
  • 49. Can I use type annotations in JavaScript?
  • 50. Type Annotations in EcmaScript JavaScript that scales By Microsoft typescriptlang.org/ Sponsored By Facebook flowtype.org/

Editor's Notes

  • #3: 2 goals: A hint of the future of the most popular programming language in the world. Getting some of you excited about this period of evaluation of the language, the process and hopefully getting some of you to contribute.
  • #4: But in order to understand where are we heading to, we need to know where are we coming from.
  • #13: As every language out there, JavaScript provides an extension mechanism to add new capabilities to a JavaScript program.
  • #18: All major browsers have a conformant ES5 implementation of EcmaScript
  • #26: if (arr.indexOf(el) !== -1) { ... } with various other possibilities, e.g. arr.indexOf(el) >= 0, or even ~arr.indexOf(el). These patterns exhibit two problems: They fail to "say what you mean": instead of asking about whether the array includes an element, you ask what the index of the first occurrence of that element in the array is, and then compare it or bit-twiddle it, to determine the answer to your actual question. They fail for NaN, as indexOf uses Strict Equality Comparison and thus [NaN].indexOf(NaN) === -1.
  • #28: DOMStringList and DOMTokenList have methods named contains with the same semantics as includes.
  • #43: The common theme about all the new features that we want to add to the language is that we want to align with EWM