Root of the hierarchy of JavaScript types.
Root of the hierarchy of JavaScript types.
Subtypes of js.Any are JavaScript types, which have different semantics and guarantees than Scala types (subtypes of AnyRef and AnyVal). Operations on JavaScript types behave as the corresponding operations in the JavaScript language.
You can implement JavaScript types in Scala.js. The implementation (i.e., the method and constructor bodies) will follow Scala semantics, but the constructor and methods will be called using JavaScript semantics (e.g., runtime dispatch).
A JavaScript type that is annotated with @js.native is a facade type to APIs implemented in JavaScript code. Its implementation is irrelevant and never emitted. As such, all members must be defined with their right-hand-side being js.native. Further, native JavaScript types must be annotated with one of @JSGlobal, @JSImport, @JSGlobalScope to specify where to fetch it from.
In most cases, you should not directly extend this trait, but rather extend js.Object.
It is not possible to define traits or classes that inherit both from this trait and a strict subtype of AnyRef. In fact, you should think of js.Any as a third direct subclass of scala.Any, besides scala.AnyRef and scala.AnyVal.
See the JavaScript interoperability guide of Scala.js for more details.
Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations.
Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. Neither the length of a JavaScript array nor the types of its elements are fixed. Since an array's size length grow or shrink at any time, JavaScript arrays are not guaranteed to be dense. In general, these are convenient characteristics; but if these features are not desirable for your particular use, you might consider using typed arrays.
MDN
To construct a new array with uninitialized elements, use the constructor of this class. To construct a new array with specified elements, as if you used the array literal syntax in JavaScript, use the Array.apply method instead.
Type of the elements of the array
Equivalent of scm.ArrayOps
for js.Array.
Equivalent of scm.ArrayOps
for js.Array.
ECMAScript 2019
ECMAScript 2019
A built-in object that provides a way to represent whole numbers larger than 2 ^ 53 - 1, which is the largest number JavaScript can reliably represent with the Number primitive.
BigInt can be used for arbitrarily large integers.
Stores the JS constructor function of a JS class.
Stores the JS constructor function of a JS class.
A ConstructorTag[T]
holds the constructor function of a JS class, as
retrieved by js.constructorOf[T]
. Similarly to
ClassTags, ConstructorTag
s can be implicitly
materialized when T
is statically known to be a JS class, i.e., a valid
type argument to js.constructorOf
.
Creates a JavaScript Date instance that represents a single moment in time.
Creates a JavaScript Date instance that represents a single moment in time. Date objects are based on a time value that is the number of milliseconds since 1 January, 1970 UTC.
MDN
Dictionary "view" of a JavaScript value.
Dictionary "view" of a JavaScript value.
Using objects as dictionaries (maps from strings to values) through their properties is a common idiom in JavaScript. This trait lets you treat an object as such a dictionary, with the familiar API of a Map.
To use it, cast your object, say x
, into a Dictionary using
val xDict = x.asInstanceOf[js.Dictionary[Int]]
then use it as
xDict("prop") = 5 println(xDict.get("prop")) // displays Some(5) xDict -= "prop" // removes the property "prop" println(xDict.get("prop")) // displays None
To enumerate all the keys of a dictionary, use collection methods or for comprehensions. For example:
for ((prop, value) <- xDict) { println(prop + " -> " + value) }
Note that this does not enumerate properties in the prototype chain of
xDict
.
This trait extends js.Any directly, because it is not safe to call methods of js.Object on it, given that the name of these methods could be used as keys in the dictionary.
Dynamically typed JavaScript value.
Dynamically typed JavaScript value.
Values of this trait accept all possible JavaScript operations in a dynamically typed way. You can read and write any field, call any method, apply any JavaScript operator to values of this type.
An instance representing an error that occurs regarding the global function
eval()
.
The Function constructor creates a new Function object.
The Function constructor creates a new Function object. In JavaScript every function is actually a Function object.
Function objects created with the Function constructor are parsed when the function is created. This is less efficient than declaring a function and calling it within your code, because functions declared with the function statement are parsed with the rest of the code.
All arguments passed to the function are treated as the names of the identifiers of the parameters in the function to be created, in the order in which they are passed.
Note: Functions created with the Function constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the Function constructor was called. This is different from using eval with code for a function expression.
Invoking the Function constructor as a function (without using the new operator) has the same effect as invoking it as a constructor.
MDN
ECMAScript 6 JavaScript Iterable.
ECMAScript 6 JavaScript Iterable.
Adapts a JavaScript Iterable to a Scala Iterable
Adapts a JavaScript Iterable to a Scala Iterable
ECMAScript 6 JavaScript Iterator.
ECMAScript 6 JavaScript Iterator.
Operations on JavaScript numbers.
Operations on JavaScript numbers.
Operations on JavaScript strings.
Operations on JavaScript strings.
The methods with an equivalent signature in String but
with a different meaning are prefixed by js
in this trait.
ECMAScript 2015
ECMAScript 2015
The Map object holds key-value pairs and remembers the original insertion order of the keys. Any value (both objects and primitive values) may be used as either a key or a value.
A type of key.
A type of value.
Base class of all JavaScript objects.
ECMAScript 6 Promise of an asynchronous result.
ECMAScript 6 Promise of an asynchronous result.
Attention! The nature of this class, from the ECMAScript specification, makes it inherently un-typeable, because it is not type parametric.
The signatures of the constructor and the methods then
and catch
are
only valid provided that the values of A
and B
are not
Thenables.
We recommend to use Scala's Future
s instead of Promise
as much as
possible. A Promise
can be converted to a Future
with .toFuture
and
back with .toJSPromise
(provided by JSConverters).
With
import scala.scalajs.js.Thenable.Implicits._
you can implicitly convert a Promise
to a Future
, and therefore you can
directly use the methods of Future
on Promise
s.
An instance representing an error that occurs when a numeric variable or parameter is outside of its valid range.
An instance representing an error that occurs when a numeric variable or parameter is outside of its valid range.
A RangeError is thrown when trying to pass a number as an argument to a function that does not allow a range that includes that number. This can be encountered when to create an array of an illegal length with the Array constructor, or when passing bad values to the numeric methods toExponential, toFixed, or toPrecision.
MDN
Represents an error when a non-existent variable is referenced.
The RegExp constructor creates a regular expression object for matching text with a pattern.
ECMAScript 2015
ECMAScript 6 JavaScript Symbol.
ECMAScript 6 JavaScript Symbol.
Represents an error when trying to interpret syntactically invalid code.
A thing on which one can call the then
method.
A thing on which one can call the then
method.
Thenable
s are automatically transitively flattened by the then
method
of Thenable
s. In particular, this is true for Promises.
Attention! The nature of this interface, from the ECMAScript specification, makes it inherently un-typeable, because it is not type parametric.
The signature of the then
method is only valid provided that the
values of B
do not have a then
method.
A JavaScript function where this
is considered as a first parameter.
A JavaScript function where this
is considered as a first parameter.
A tuple "view" of 2 elements of a JavaScript js.Array.
A tuple "view" of 2 elements of a JavaScript js.Array.
Supports implicit conversions to and from scala.Tuple2.
To use it, cast your array into a js.Tuple2 using
val array = js.Array[Any](42, "foobar") val tuple2 = array.asInstanceOf[js.Tuple2[Int, String]]
or convert a Scala tuple
val obj: js.Tuple2[Int, String] = (42, "foobar")
A tuple "view" of 3 elements of a JavaScript js.Array.
Represents an error when a value is not of the expected type.
Represents an error when a malformed URI is encountered.
Value of type A or the JS undefined value.
Value of type A or the JS undefined value.
This type is actually strictly equivalent to A | Unit
, since Unit
is
the type of the undefined
value.
js.UndefOr[A]
is the type of a value that can be either undefined
or
an A
. It provides an API similar to that of scala.Option through
the UndefOrOps implicit class, where undefined
take the role of
None.
By extension, this type is also suited to typing optional fields in native JS types, i.e., fields that may not exist on the object.
A Unicode Normalization Form.
A Unicode Normalization Form.
Equivalent of scm.WrappedArray
for js.Array.
Equivalent of scm.WrappedArray
for js.Array.
Wrapper to use a js.Dictionary as a scala.mutable.Map
Wrapper to use a js.Dictionary as a scala.mutable.Map
Wrapper to use a js.Map as a scala.mutable.Map
Wrapper to use a js.Map as a scala.mutable.Map
Wrapper to use a js.Set as a scala.mutable.Set
Wrapper to use a js.Set as a scala.mutable.Set
Marks the annotated class, trait or object as a native JS entity.
Marks the annotated class, trait or object as a native JS entity.
Native JS entities are not implemented in Scala.js. They are facade types for native JS libraries.
Only types extending js.Any can be annotated with @js.native
.
The body of all concrete members in a native JS class, trait or object
must be = js.native
.
Value of type A or B (union type).
Value of type A or B (union type).
Scala does not have union types, but they are important to many interoperability scenarios. This type provides a (partial) encoding of union types using implicit evidences.
Provides implicit conversions from Scala values to JavaScript values.
Factory for js.Array objects.
ECMAScript 2019
Factory for js.Date objects.
Factory for js.Dictionary instances.
Factory for dynamically typed JavaScript values.
Provides implicit conversions and operations to write in JavaScript style with js.Dynamic.
Provides implicit conversions and operations to write in JavaScript style with js.Dynamic.
Be **very** careful when importing members of this object. You may want to selectively import the implicits that you want to reduce the likelihood of making mistakes.
A collection of decorators that allow converting Scala types to corresponding JS facade types
The JSON object contains methods for converting values to JavaScript Object Notation (JSON) and for converting JSON to values.
Factory for js.Map instances.
Math is a built-in object that has properties and methods for mathematical constants and functions.
The top-level Object
JavaScript object.
Factory for js.Set instances.
ECMAScript 6 Factory for js.Symbols and well-known symbols.
Methods related to URIs, provided by ECMAScript 5.1.
Methods related to URIs, provided by ECMAScript 5.1.
Factory for js.WrappedArray.
Factory for js.WrappedArray. Mainly provides the relevant CanBuildFromss and implicit conversions.
Returns the constructor function of a JavaScript class.
Returns the constructor function of a JavaScript class.
The specified type parameter T
must be a class type (i.e., valid for
classOf[T]
) and represent a class extending js.Any
(not a trait nor
an object).
Makes explicit an implicitly available js.ConstructorTag.
Evaluates JavaScript code and returns the result.
Evaluates JavaScript code and returns the result.
ECMAScript 2019
Dynamic import(specifier)
.
ECMAScript 2019
Dynamic import(specifier)
.
This is an object rather than a simple def
to reserve the possibility to
add "fields" to the function, notably to support the import.meta
meta-property of ECMAScript (still being specified).
Tests whether the given value is undefined.
Tests whether the given value is undefined.
Denotes a method body as native JavaScript.
Denotes a method body as native JavaScript. For use in facade types:
class MyJSClass extends js.Object { def myMethod(x: String): Int = js.native }
Non-Standard Non-standard, but in general well supported methods to schedule asynchronous execution.
Non-Standard Non-standard, but in general well supported methods to schedule asynchronous execution.
The methods in this package work in all JavaScript virtual machines
supporting setTimeout
and setInterval
.
Returns the type of x
as identified by typeof x
in JavaScript.
ECMAScript 6 The typdearray package provides facade types for JavaScript ArrayBuffer, TypeArrays and DataView.
ECMAScript 6 The typdearray package provides facade types for JavaScript ArrayBuffer, TypeArrays and DataView. Further, it provides conversions between primitive Scala arrays and TypedArrays
The undefined value.
The undefined value.
Types, methods and values for interoperability with JavaScript libraries.
This package is only relevant to the Scala.js compiler, and should not be referenced by any project compiled to the JVM.
Guide
General documentation on Scala.js is available at http://www.scala-js.org/doc/.
Overview
The trait js.Any is the root of the hierarchy of JavaScript types. This package defines important subtypes of js.Any that are defined in the standard library of ECMAScript 5.1 (or ES 6, with a label in the documentation), such as js.Object, js.Array and js.RegExp.
Implicit conversions to and from standard Scala types to their equivalent in JavaScript are provided. For example, from Scala functions to JavaScript functions and back.
The most important subtypes of js.Any declared in this package are:
this
as an explicit parameterThe trait js.Dynamic is a special subtrait of js.Any. It can represent any JavaScript value in a dynamically-typed way. It is possible to call any method and read and write any field of a value of type js.Dynamic.
There are no explicit definitions for JavaScript primitive types, as one could expect, because the corresponding Scala types stand in their stead:
null
)Null
is the type of the JavaScript null valuejs.UndefOr gives a scala.Option-like interface where the JavaScript value
undefined
takes the role ofNone
.A | B is an unboxed pseudo-union type, suitable to type values that admit several unrelated types in facade types.