crow/js.crow
(source)
Contains functions for JavaScript primitive operations.
Functions here are marked 'bare' even if they may allocate; 'bare' doesn't matter in JS,
but many functions that need to be 'bare' for native code need to use these functions.
as-js
[t
] js-any
(a
t
) bare
, unsafe
cast
[t
] t
(a
js-any
) bare
, unsafe
js-global
js-any
() bare
, unsafe
js-global
js-any
(name
symbol
) bare
, unsafe
subscript
js-any
(a
js-any
, key
string
) bare
, unsafe
a[key]
subscript
js-any
(a
js-any
, key
nat64
) bare
, unsafe
In JavaScript, the argument to a subscript is always a string,
and array indices are implicitly converted to strings.
subscript
js-any
(a
js-any
, key
float64
) bare
, unsafe
set-subscript
[t
] void
(a
js-any
, key
string
, value
t
) bare
, unsafe
a[key] = value
set-subscript
[t
] void
(a
js-any
, key
nat64
, value
t
) bare
, unsafe
set-subscript
[t
] void
(a
js-any
, key
float64
, value
t
) bare
, unsafe
call
js-any
(a
js-any
) bare
, unsafe
a()
WARN: This does not 'await' the result.
WARN: 'get' followed by 'call' may not work. Use 'call-property' instead.
call
[p0
] js-any
(a
js-any
, arg
p0
) bare
, unsafe
a(arg)
call
[p0
, p1
] js-any
(a
js-any
, arg0
p0
, arg1
p1
) bare
, unsafe
a(arg0, arg1)
call
[p0
, p1
, p2
] js-any
(a
js-any
, arg0
p0
, arg1
p1
, arg2
p2
) bare
, unsafe
a(arg0, arg1, arg2)
call-new
js-any
(a
js-any
) bare
, unsafe
new a()
call-new
[p0
] js-any
(a
js-any
, arg
p0
) bare
, unsafe
new a(arg)
call-new
[p0
, p1
] js-any
(a
js-any
, arg
p0
, arg1
p1
) bare
, unsafe
new a(arg0, arg1)
call-new
[p0
, p1
, p2
] js-any
(a
js-any
, arg
p0
, arg1
p1
, arg2
p2
) bare
, unsafe
new a(arg0, arg1, arg2)
call-property
js-any
(a
js-any
, name
string
) bare
, unsafe
a[name]()
call-property
[p0
] js-any
(a
js-any
, name
string
, arg
p0
) bare
, unsafe
a[name](arg)
call-property
[p0
, p1
] js-any
(a
js-any
, name
string
, arg0
p0
, arg1
p1
) bare
, unsafe
a[name](arg0, arg1)
call-property
[p0
, p1
, p2
] js-any
(a
js-any
, name
string
, arg0
p0
, arg1
p1
, arg2
p2
) bare
, unsafe
a[name](arg0, arg1, arg2)
call-property-spread
[p
] js-any
(a
js-any
, name
string
, args
p
array
) bare
, unsafe
a[name](...args)
js-cast
[out
, in
] out
(a
in
) bare
, unsafe
Treat one type as another. This is a noop in JS.
This should only be done if the input value can be treated as the output type.
For example, a nat8
can be treated as a nat64
since they are both represented as BigInt
s
and every valid nat8
value is a valid nat64
value.
However, you should usually use a to
function (such as to nat64(a nat8)
)
since those are safe and cross-platform.
null
js-any
() bare
undefined
js-any
() bare
await
js-any
(a
js-any
) bare
, unsafe
typeof
string
(a
js-any
) bare
, unsafe
==
bool
(a
js-any
, b
js-any
) bare
, unsafe
NOTE: This is actually JavaScript's ===
operator.
instanceof
bool
(a
js-any
, b
js-any
) bare
, unsafe
<
bool
(a
js-any
, b
js-any
) bare
, unsafe
+
js-any
(a
js-any
, b
js-any
) bare
, unsafe
new
js-any
(...
properties
(symbol
, js-any
) tuple2
array
) bare
Create a new JavaScript object.("x", 1::float.as-js), ("y", "why")
is like { x: 1, y: "why" }
in JavaScript.
to-js-object
js-any
(properties
(symbol
, js-any
) tuple2
array
) bare
eval
js-any
(source
string
) bare
, unsafe
Calls JavaScript's 'eval' function. 'source' should be JavaScript source code.
This could be useful for making use of JS features that don't have a Crow analog,
or if you just have a big chunk of JS code and don't have time to translate it to Crow.
This happens in its own scope, so don't count on anything being in the enclosing scope.
Instead, eval
a function literal, then call
it, like "x => f(x)".eval call x
.
If appropriate, remember to make the function async
and await
the result.