js.eval: Difference between revisions

From RPTools Wiki
Jump to navigation Jump to search
mNo edit summary
No edit summary
(2 intermediate revisions by one other user not shown)
Line 7: Line 7:
Evaluates a string as a javascript expression.  Supports ECMA 2021 standard.  For security, access to native types and external resources are limited.  Similarly, all arrays passed in to the javascript environment are shallow copied, so changes to the array do not directly change MapTool's state.   
Evaluates a string as a javascript expression.  Supports ECMA 2021 standard.  For security, access to native types and external resources are limited.  Similarly, all arrays passed in to the javascript environment are shallow copied, so changes to the array do not directly change MapTool's state.   


Starting in 1.10.0, the context in which the javascript fragment executes is discarded when <source>js.eval</source> returns.  For setting up persistent structures, see {{func|js.evalNS}} or {{func|js.evalURI}}
Starting in 1.10.0, the context in which the javascript fragment executes is discarded when <syntaxhighlight>js.eval</syntaxhighlight> returns.  For setting up persistent structures, see {{func|js.evalNS}} or {{func|js.evalURI}}


|usage=
|usage=
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
js.eval(expression, arg1, arg2...)
js.eval(expression, arg1, arg2...)
</source>
</syntaxhighlight>


'''Parameters'''
'''Parameters'''
Line 24: Line 24:
|example=
|example=
Using {{code|js.eval}} on an {{code|expression}}.
Using {{code|js.eval}} on an {{code|expression}}.
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[r: js.eval("let a = [1,2,3]; return a[1] + args[0]", 5)]
[r: js.eval("let a = [1,2,3]; return a[1] + args[0]", 5)]
</source>
</syntaxhighlight>
'''Output:'''
'''Output:'''
<source lang="mtmacro">
<syntaxhighlight lang="mtmacro">
7
7
</source>
</syntaxhighlight>





Revision as of 20:07, 15 March 2023

 This article describes a feature or macro function that is experimental and may be subject to change.

js.eval() Function

 Note: This function can only be used in a Trusted Macro

Introduced in version 1.10.0
Evaluates a string as a javascript expression. Supports ECMA 2021 standard. For security, access to native types and external resources are limited. Similarly, all arrays passed in to the javascript environment are shallow copied, so changes to the array do not directly change MapTool's state. Starting in 1.10.0, the context in which the javascript fragment executes is discarded when
js.eval
returns. For setting up persistent structures, see js.evalNS() or js.evalURI()

Usage

js.eval(expression, arg1, arg2...)

Parameters

  • expression - A valid javascript fragment. It is wrapped inside an anonymous function.
  • arg1, arg2... - Any. Will be converted to the equivalent javascript type as needed. Arguments are accessible via the args variable.
  • return - Any primitive type; Complex types are converted to (JSON) strings.

Example

Using js.eval on an expression.
[r: js.eval("let a = [1,2,3]; return a[1] + args[0]", 5)]

Output:

7

See Also