Testing

ES6: Browser Support, Features, Known Issues

ES6 works in Chrome 51+, Edge 15+, Firefox 54+, Safari 10+ on macOS and iOS, Opera 38+, and Samsung Internet 5+. Learn ES6 browser support, features, and known issues.

Author

Prince Dewani

May 1, 2026

ES6, or ECMAScript 2015, is the sixth edition of the ECMAScript standard from Ecma International's TC39 that added let, const, classes, arrow functions, promises, and modules to JavaScript. It works in Chrome 51+, Edge 15+, Firefox 54+, Safari 10+, Opera 38+, and Samsung Internet 5+, while Internet Explorer 11 supports only a small subset.

This guide covers what ES6 is, the browsers that support it, the key features, how to check support, the ES5 differences, and the known issues.

What is ES6?

ES6 is the sixth edition of the ECMAScript language specification, also known as ECMAScript 2015 or ES2015. Ecma International's TC39 committee publishes it as ECMA-262. It adds block-scoped variables, classes, arrow functions, template literals, destructuring, default parameters, promises, and native modules to JavaScript.

Which browsers does ES6 support?

ES6 works in every modern desktop and mobile browser, with Chrome, Firefox, Safari, Edge, Opera, and Samsung Internet all shipping the full specification by default. Internet Explorer 11 covers only a small slice, and IE 9 and 10 do not support ES6 at all.

Loading browser compatibility data...

ES6 compatibility in Chrome

Chrome supports the full ES6 specification from Chrome 51 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 21 to 50 had partial support, with arrow functions, classes, and let or const arriving in stages. Chrome 1 to 20 did not support any ES6 features. Chrome for Android follows the same version numbers as desktop Chrome.

ES6 compatibility in Edge

Microsoft Edge supports ES6 from Edge 15 on Windows 10, the first version to ship the full specification. Legacy EdgeHTML 12 to 14 had partial support, with most syntax features working but a few iterator and tail-call corners missing. Chromium-based Edge from Edge 79 inherits Chrome's full ES6 support on Windows, macOS, Linux, and Android.

ES6 compatibility in Firefox

Firefox supports the full ES6 specification from Firefox 54 on Windows, macOS, Linux, and Android. Firefox 6 to 53 had progressive partial support, with let and const landing in Firefox 44, classes in Firefox 45, and arrow functions in Firefox 22. Firefox 1 to 5 did not support ES6.

ES6 compatibility in Safari

Safari supports the full ES6 specification from Safari 10 on macOS Sierra and from Safari 10 on iOS 10. Safari 7.1 to 9.1 on macOS and Safari 7 to 9.3 on iOS shipped partial ES6 support, with classes, let, const, and template literals appearing across that range. Safari 6 and earlier do not support ES6.

ES6 compatibility in Opera

Opera supports the full ES6 specification from Opera 38, which tracks the same Chromium engine as Chrome 51. Opera 15 to 37 had partial support that mirrored Chromium's progress. Opera Mobile 38 and later support ES6 on Android. Opera 12 and earlier, on the Presto engine, do not support ES6.

ES6 compatibility in Samsung Internet

Samsung Internet supports the full ES6 specification from Samsung Internet 5 on Galaxy phones and tablets. Samsung Internet 4 had partial support that mirrored Chrome 44. The browser is built on Chromium, so it follows the same ES6 rollout as Chrome for Android.

ES6 compatibility in Android Browser

Chrome for Android supports the full ES6 specification from Chrome 51 on Android 4.1 and later. The legacy stock Android Browser shipped with Android 4.4 had partial ES6 support, mostly typed arrays and Map and Set. The pre-Chromium Android Browser on Android 4.3 and earlier does not support ES6. Modern Android phones use Chrome for Android, Samsung Internet, or Firefox for Android.

ES6 compatibility in Internet Explorer

Internet Explorer 11 supports a small subset of ES6, mostly typed arrays, Map, Set, WeakMap, and WeakSet. It does not support let, const, arrow functions, classes, modules, promises, template literals, destructuring, default parameters, or rest and spread. IE 9 and 10 do not support any ES6 features. Microsoft has retired Internet Explorer, so any new ES6 work targets Edge or another modern browser.

Note

Note: ES6 syntax breaks across older Safari, IE 11, and legacy mobile WebView builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key features of ES6?

ES6 added the largest set of language features in any single ECMAScript edition. Most modern JavaScript code, including React, Vue, Angular, Node.js, and TypeScript output, depends on these features by default.

  • let and const: Block-scoped variable declarations that replace the function-scoped var. const blocks reassignment, which makes intent obvious to the reader and stops a class of bugs.
  • Arrow functions: Concise function syntax with a lexical this binding. Useful for callbacks, array methods like map and filter, and event handlers where you want to keep the outer this.
  • Classes: A clean syntax for prototype-based inheritance with constructor, extends, super, and static. The runtime semantics still use prototypes underneath.
  • Template literals: Backtick strings that support multi-line text and ${expression} interpolation without escape characters or string concatenation.
  • Destructuring: Pulls values out of arrays or objects in one expression. Works in function parameters, return values, and import statements.
  • Default, rest, and spread: Default parameter values, the rest parameter that gathers extra arguments into an array, and the spread operator that expands arrays or objects into elements.
  • Promises: Built-in Promise object for chaining asynchronous work, the building block for fetch and async or await in later editions.
  • Modules: Native import and export statements that replace CommonJS or AMD module systems. Browsers load them with type="module" on the script tag.
  • Map, Set, WeakMap, WeakSet: Real hash-map and hash-set collection types with stable insertion order, replacing object-as-map workarounds.
  • Symbols and iterators: A new primitive type plus the iterator and iterable protocols that power for...of loops and generator functions.

How do you check if a browser supports ES6?

You can confirm ES6 support inside any browser by trying to compile a small block of ES6 syntax with the Function constructor and checking that the global Symbol and Promise objects exist. The Function constructor throws a SyntaxError on engines that cannot parse ES6, which gives you a reliable yes or no answer.

Paste this snippet into the browser DevTools console to confirm ES6 support and the related ES6 module loader hook:

// Paste this into the browser DevTools console to test ES6 support.
function supportsES6() {
  try {
    // Each line uses an ES6-only construct: arrow function with default param,
    // class syntax, template literal with const, and array destructuring with let.
    new Function("(a = 1) => a")();
    new Function("class T {}");
    new Function("const x = `v${1}`");
    new Function("let [a, b] = [1, 2]");
    return typeof Symbol === "function" && typeof Promise === "function";
  } catch (e) {
    return false;
  }
}

console.log("ES6 supported in this browser:", supportsES6());
console.log("Module script support:", "noModule" in document.createElement("script"));

If supportsES6() returns true, the engine handles every common ES6 syntax feature. The noModule check tells you whether the same engine recognises the script type="module" attribute, which is the gate for native ES6 modules. For a finer-grained read, use compat-table.github.io/compat-table/es6/ in any browser.

...

What is the difference between ES5 and ES6?

ES5 is the JavaScript baseline that every browser, including IE 9, supports natively. ES6 is the 2015 rewrite that brings JavaScript closer to languages like Java, Python, and C# in syntax and ergonomics.

DimensionES5ES6
Standard edition5th edition of ECMA-2626th edition of ECMA-262, also called ECMAScript 2015
Variable declarationsvar only, function-scopedlet and const for block scope, plus var
Functionsfunction expressions, dynamic thisArrow functions with lexical this, default and rest parameters
ClassesPrototype chain with manual setupclass, extends, super, and static keywords
StringsString concatenation with quotes and the plus operatorBacktick template literals with interpolation and multi-line
AsyncCallback-based, manual error handlingNative Promise object with chaining and Promise.all
ModulesNone native, CommonJS or AMD on the sideNative import and export with script type="module"
Browser reachEvery browser including IE 9 and IE 10Chrome 51+, Firefox 54+, Safari 10+, Edge 15+, Opera 38+, Samsung Internet 5+. IE 11 partial only.

What are the known issues with ES6 in older browsers?

ES6 has near-universal modern support, but a few real failure modes still bite teams that target older Windows fleets, embedded WebViews, or international markets where legacy mobile browsers persist. The biggest hits are Internet Explorer, partial-support Safari builds, and silent module-loader breakage.

  • Internet Explorer 11 ignores most ES6 syntax: Any inline arrow function, class, let, const, or template literal throws a SyntaxError on parse. The whole script fails to load, not just the offending statement, so the page silently breaks.
  • Older Safari hangs on partial features: Safari 9 supports classes and let, but proper tail calls and full destructuring landed only in Safari 10. Code that destructures inside a default parameter throws on Safari 9 and earlier.
  • ES6 modules need type="module": Browsers ignore import and export when the script tag lacks type="module". Forgetting that attribute is the most common reason a working module setup throws "unexpected token" in production.
  • Tail call optimisation is not really shipped: The spec calls for proper tail calls, but only Safari and JavaScriptCore implement it. Code that relies on PTC for deep recursion overflows in Chrome, Firefox, and Edge.
  • Symbol.toPrimitive is uneven on legacy mobile: Older Samsung Internet and Android Browser builds skip the Symbol.toPrimitive coercion path. Custom valueOf or Symbol.toPrimitive logic returns the default object string instead.
  • const with destructuring tripped older WebViews: Mobile WebViews based on pre-Chromium engines parse "const { a } = obj" inconsistently. Test embedded WebViews on real Android devices before assuming ES6 parity with the system Chrome build.
  • Polyfills do not cover syntax: Polyfill libraries like core-js add Map, Set, and Promise to old engines, but they cannot add new syntax. You still need Babel or TypeScript to compile let, const, classes, and arrow functions to ES5 for IE 11.

In my experience, the most surprising failure happens on corporate Windows fleets where IE 11 still loads in compatibility mode for one internal app. A single inline arrow function in a third-party widget script crashes the whole page with "Object doesn't support this property or method", and the error never surfaces in dev tools because IE silently skips the rest of the script. Always wrap third-party widgets in a feature detect or a Babel build before shipping to a Windows enterprise audience.

...

Citations

All ES6 version numbers and feature notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests