js.evalNS: Difference between revisions

From RPTools Wiki
Jump to navigation Jump to search
(Created page with "{{Experimental}} {{MacroFunction |name=js.evalNS |version=1.10.0 |description= Evaluates a string as a javascript expression. Supports ECMA 2021 standard. For security, acce...")
 
No edit summary
Line 25: Line 25:
Using {{code|js.eval}} on an {{code|expression}}.
Using {{code|js.eval}} on an {{code|expression}}.
<source lang="mtmacro" line>
<source lang="mtmacro" line>
[r: js.evalNS("demo", "let a = [1,2,3]; a[1] + args[0]"), 5]
[r: js.evalNS("demo", "let a = [1,2,3]; a[1] + args[0]", 5)]
</source>
</source>
'''Output:'''
'''Output:'''

Revision as of 18:34, 17 September 2021

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

js.evalNS() Function

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. Unlike js.eval(), js.evalNS() does not wrap the fragment in an anonymous function. The statement in tail position (usually the last statement) is the return value for js.evalNS().

Usage

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

Parameters

  • namespace - The namespace to run the fragment in. It will be created if it does not yet exist.
  • expression - A valid javascript fragment.
  • 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.evalNS("demo", "let a = [1,2,3]; a[1] + args[0]", 5)]

Output:

7

See Also