Jurassic is an implementation of the ECMAScript language and runtime. It aims to provide the best performing and most standards-compliant implementation of JavaScript for .NET. Jurassic is not intended for end-users; instead it is intended to be integrated into .NET programs. If you are the author of a .NET program, you can use Jurassic to compile and execute JavaScript code.
- Supports all ECMAScript 3 and ECMAScript 5 functionality, including ES5 strict mode
- Well tested - passes over five thousand unit tests (with over thirty thousand asserts)
- Simple yet powerful API
- Compiles JavaScript into .NET bytecode (CIL); not an interpreter
- Deployed as a single .NET assembly (no native code)
- Basic support for integrated debugging within Visual Studio
- Uses light-weight code generation, so generated code is fully garbage collected
- Tested on .NET 3.5, .NET 4 and Silverlight
Install the NuGet package.
See the wiki for full usage details.
Support for ECMAScript 6 is in progress. See http://kangax.github.io/compat-table/es6/ for the definition of each feature. The table below is correct as of version 3.1.
| Feature | Status |
|---|---|
| Optimisation | |
| proper tail calls (tail call optimisation) | ❌ |
| Syntax | |
| default function parameters | 4/7 |
| rest parameters | ❌ |
| spread syntax for iterable objects | ❌ |
| object literal extensions | ✅ 6/6 |
| for..of loops | 6/9 |
| octal and binary literals | ✅ 4/4 |
| template literals | 6/7 |
| RegExp "y" and "u" flags | ❌ |
| destructuring, declarations | ❌ |
| destructuring, assignment | ❌ |
| destructuring, parameters | ❌ |
| Unicode code point escapes | ✅ 4/4 |
| new.target | ✅ 2/2 |
| Bindings | |
| const | ✅ 18/18 |
| let | 14/16 |
| block-level function declaration[18] | ❌ |
| Functions | |
| arrow functions | ❌ |
| class | ✅ 24/24 |
| super | ✅ 8/8 |
| generators | ❌ |
| Built-ins | |
| typed arrays | 45/46 |
| Map | 18/19 |
| Set | 18/19 |
| WeakMap | 11/12 |
| WeakSet | 10/11 |
| Proxy [25] | 33/34 |
| Reflect [26] | 18/20 |
| Promise | 4/8 |
| Symbol | ✅ 12/12 |
| well-known symbols[27] | 23/26 |
| Built-in extensions | |
| Object static methods | ✅ 4/4 |
| function "name" property | 10/17 |
| String static methods | ✅ 2/2 |
| String.prototype methods | ✅ 10/10 |
| RegExp.prototype properties | ✅ 6/6 |
| Array static methods | 8/11 |
| Array.prototype methods | ✅ 10/10 |
| Number properties | ✅ 9/9 |
| Math methods | ✅ 17/17 |
| Date.prototype[Symbol.toPrimitive] | ✅ 1/1 |
| Subclassing | |
| Array is subclassable | 9/11 |
| RegExp is subclassable | ✅ 4/4 |
| Function is subclassable | 4/6 |
| Promise is subclassable | ❌ |
| miscellaneous subclassables | ❌ |
| Misc | |
| prototype of bound functions | 1/5 |
| Proxy, internal 'get' calls | 19/36 |
| Proxy, internal 'set' calls | 7/11 |
| Proxy, internal 'defineProperty' calls | ❌ |
| Proxy, internal 'deleteProperty' calls | ❌ |
| Proxy, internal 'getOwnPropertyDescriptor' calls | 2/4 |
| Proxy, internal 'ownKeys' calls | ✅ 3/3 |
| Object static methods accept primitives | ✅ 10/10 |
| own property order | 5/7 |
| Updated identifier syntax | 1/3 |
| miscellaneous | 8/9 |
| Annex b | |
| non-strict function semantics[35] | 2/3 |
| __proto__ in object literals [36] | ❌ |
| Object.prototype.__proto__ | 1/6 |
| String.prototype HTML methods | ✅ 3/3 |
| RegExp.prototype.compile | 1/2 |
| RegExp syntax extensions | 4/8 |
| HTML-style comments | ❌ |
