Skip to content
A feature detection library for ECMAScript in node.js and browser.
JavaScript CSS HTML
Branch: master
Clone or download
Latest commit 327a79e Jul 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin fix typo which was shown in the May 19, 2016
lib fix TCO Jul 15, 2019
public fix TCO Jul 15, 2019
test add new feature test Jul 4, 2015
.gitignore feat: add gh-pages script Jun 8, 2016 add new feature test Jul 4, 2015
es-checker.js fix TCO Jul 15, 2019
index.js fix: change Object.getOwnSymbolNames to Object.getOwnPropertySymbols Jun 8, 2016
package.json fix: Version 1.4.1 - edit oldOctalLiteral Mar 10, 2017
screenshot.png edit README Jun 29, 2015

ES-Checker is a feature detection library for ECMAScript in node.js and browser. Please visit demo.

How to use

Command line

$ npm install -g es-checker
$ es-checker


First install es-checker locally.

$ npm install --save es-checker

Then require it in your script.

var Supports = require("es-checker");

if (Supports.letConst) {
  let x = 5;
} else {
  var x = 5;

The whole Api List please see below.


First insert es-checker.js into your page.

<script src=""></script>

Then use Supports to decide which feature to use. Visit demo.

if (Supports.letConst) {
  let x = 5;
} else {
  var x = 5;

The whole API List please see below.


This library is derived from es-feature-tests. The following API is copied from it. Visit for more information, including how to test a feature by yourself.

  • letConst: let and const
  • defaultParameter: default function parameter values
  • spreadRest: ... operator
  • destructuring: destructuring assignments/declarations for arrays and objects
  • parameterDestructuring: destructuring for function parameters
  • templateString: .. Template String Literals
  • forOf: for (var v of something) { .. }
  • arrow: x => x * x
  • generator: function *foo() { .. }
  • conciseMethodProperty: o = { b() { .. }, a }
  • computedProperty: o = { ["a" + "b"]: 42 }
  • moduleExport: In modules, export default foo = 42
  • moduleImport: In modules, import bar from "foo"
  • class: class A extends B { .. }
  • numericLiteral: Octal and binary literal forms (0o1, 0b10)
  • oldOctalLiteral: Old octal literal invalid now (01)
  • symbol: Symbol primitive
  • unicodeEscape: Unicode code-point escape form in string literals ('\u{20BB7}')
  • unicodeIdentifier: Unicode code-point escape form in identifier names (\u{20BB7} = 42)
  • unicodeRegExp: Unicode code-point escape form in regular expressions (/\u{20BB7}/u)
  • stickyRegExp: y flag for sticky regular expressions
  • letTDZ: TDZ error for too-early access of let or const declarations
  • constRedef: Redefinition of const declarations not allowed
  • objectProto: proto in object literal definition sets [[Prototype]] link
  • objectSuper: super allowed in object methods
  • extendNatives: class ABC extends Array { .. }
  • tco: Tail-call optimization for function calls and recursion
  • symbolImplicitCoercion: Symbols can't be implicitly coerced (Symbol("a") + "")
  • functionNameInfernece: Inferences for function name property for anonymous functions
  • objectStatics: Static functions added to Object
  • arrayStatics: Static functions added to Array
  • arrayMethods: Methods added to Array.prototype
  • typedArrays: TypedArrays like Uint8Array (technically a web platform feature long before ES6)
  • typedArrayStatics: Some Array statics (like from(..)) added to the TypedArray constructors
  • typedArrayMethods: Some Array methods (like map(..)) added to the TypedArray prototypes
  • stringMethods: Methods added to String.prototype
  • numberStatics: Static functions added to Number
  • mathStatics: Static functions added to Math
  • collections: Collections added (Map, Set, WeakMap, WeakSet)
  • proxy: Proxies
  • promise: Promises
  • reflect: Reflect



You can’t perform that action at this time.