About gjs
=
GNOME JavaScript bindings
News
- New JavaScript features! This version of GJS is based on SpiderMonkey 91, an
upgrade from the previous ESR (Extended Support Release) of SpiderMonkey 78.
Here are the highlights of the new JavaScript features.
For more information, look them up on MDN or devdocs.io.
* New syntax
+ Private class fields and methods are now supported. They start with `#`
and are not accessible outside the class in which they are defined.
+ The `??=` logical nullish assignment operator, which assigns the
right-hand side value to the left-hand side variable if the variable is
null or undefined.
+ The `&&=` logical-and assignment operator, which assigns the right-hand
side value to the left-hand side variable if the variable is truthy.
+ The `||=` logical-or assignment operator, which assigns the right-hand
side value to the left-hand side variable if the variable is falsey.
+ `export * as ... from ...` can be used to aggregate modules.
+ Regular expressions add the `d` flag, which if defined causes the
resulting match object to have an `indices` property giving the positions
in the string where capturing and named groups matched.
+ `static { ... }` blocks in classes allow initialization of classes at the
time of creation of the class.
* New APIs
+ Arrays, strings, and typed arrays have gained the `at()` method, which
does the same thing as indexing with square brackets but also allows
negative numbers, which count from the end, as in Python.
+ `Promise.any()`, which is similar to `Promise.race()` but resolves on the
first successful sub-promise, instead of the first to resolve.
+ `Error()` now takes an options object as its second parameter, which may
contain a `cause` property. This option is used to indicate when an error
is caused by another error, but the first error is caught during error
handling.
+ `WeakRef`, which allows you to hold a reference to an object while still
allowing it to be garbage collected.
+ `dateStyle`, `timeStyle`, `fractionalSecondDigits`, and `dayPeriod` are
now accepted as options in `Intl.DateTimeFormat()` and
`Date.prototype.toLocaleString()`.
+ `collation` is now accepted as an option in `Intl.Collator()`.
+ `Intl.DisplayNames` has been added, which allows you to get translations
of language, region, currency, and script names.
+ `Intl.DateTimeFormat` has gained the `formatRange()` and
`formatRangeToParts()` methods.
* New behaviour
+ More numbering systems are supported in `Intl.NumberFormat`.
+ Top-level await (https://v8.dev/features/top-level-await) allows you to
use `await` statements outside of an `async` function in an ES module.
+ There are a lot of minor behaviour changes as SpiderMonkey's JS
implementation conforms ever closer to existing ECMAScript standards and
adopts new ones. For complete information, read the Firefox developer
release notes:
https://developer.mozilla.org/en-US/Firefox/Releases/79#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/80#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/81#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/82#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/83#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/84#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/85#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/86#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/87#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/88#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/89#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/90#JavaScript
https://developer.mozilla.org/en-US/Firefox/Releases/91#JavaScript
- It's now possible to pass BigInt values to GObject-introspected functions with
64-bit parameters. This way, you can finally work with large numbers that
cannot be accurately stored as a JS Number value and pass them correctly into
C. For example, `GLib.Variant.new_int64(2n ** 62n)`.
- New API: GJS now has a standards-compliant `setTimeout()` and `setInterval()`.
These can now be used as in web browsers, while still integrating with GLib's
main loop.
- New API: `Cairo.Context.prototype.textExtents()` which makes the
`cairo_text_extents()` C function available to JavaScript.
- New overrides: `GLib.MAXINT64_BIGINT`, `GLib.MININT64_BIGINT`, and
`GLib.MAXUINT64_BIGINT` are BigInt-typed versions of `GLib.MAXINT64` etc.
- It's now possible to use a regular `constructor()` in GObject classes instead
of an `_init()` method.
- It's now possible to use class fields in GObject classes.
- `Gio._promisify()` now tries to