评估表达式
以下代码将评估一个javascript表达式:
var engine = new Jurassic.ScriptEngine();
Console.WriteLine(engine.Evaluate("5 * 10 + 2"));
此代码将向控制台输出"52"。
您可以在代码字符串中包含多个语句。最后一个有效表达式的结果将被返回。
上面对Evaluate的调用返回一个对象。如果要返回特定类型的值,则可以使用强制版本的"评估"。例如:
var engine = new Jurassic.ScriptEngine();
Console.WriteLine(engine.Evaluate<int>("1.5 + 2.4"));
此代码将"3"输出到控制台。(如果您想知道为什么它返回3而不是4,则转换为整数将使用javascript类型转换规则,该规则指定将数字四舍五入为零)。仅某些类型支持类型certain types。
执行脚本
执行脚本会从头到尾运行一个脚本。例如,要在"c:\test.js"处执行脚本,请使用以下代码:
var engine = new Jurassic.ScriptEngine();
engine.ExecuteFile(@"c:\test.js");
如果您要在字符串中运行代码,请使用以下Execute()
方法:
var engine = new Jurassic.ScriptEngine();
engine.Execute("console.log('testing')");
注意:在以下方面,执行脚本与评估脚本不同:
- Evaluate()返回一个值,Execute()但不返回。
- Execute() 运行稍微快一点。
- 内部声明的变量
Evaluate()
可以删除,而Execute()
内部声明的变量不能删除。
该规范使用术语“全局代码”和“评估代码”来描述这些差异。
访问和修改全局变量
为了与脚本进行交互,能够修改和检索全局变量的值非常有用。
例如,假设我们有以下javascript文件(c:\test.js):
interop = interop + 5
以下c#代码进行初始化,然后输出“ interop”变量的值。
var engine = new Jurassic.ScriptEngine();
engine.SetGlobalValue("interop", 15);
engine.ExecuteFile(@"c:\test.js");
Console.WriteLine(engine.GetGlobalValue<int>("interop"));
此代码将"20"输出到控制台。
请注意,您只能将变量的值设置为受支持的类型。
创建对象和数组
在JavaScript中创建“属性包”是很常见的,这些属性包具有任意属性集,如下所示:
var segment = {
type: "Feature",
properties: {},
geometry: {
type: "LineString",
coordinates: [
[ -37.3, 121.5 ],
[ -38.1, 122.6 ]
]
}
}
这是创建相同对象的等效C#代码:
var segment = engine.Object.Construct();
segment["type"] = "Feature";
segment["properties"] = engine.Object.Construct();
var geometry = engine.Object.Construct();
geometry["type"] = "LineString";
geometry["coordinates"] = engine.Array.Construct(
engine.Array.Construct(-37.3, 121.5),
engine.Array.Construct(-38.1, 122.6)
);
segment["geometry"] = geometry;
////现在可以将段设置为全局变量,或将其传递给函数。
注意:Array.Construct
行为类似于new Array
。与预期相反,new Array(5)
它不会创建单个元素数组,而是会创建长度为5的数组。您可以Array.New
改用以获得更一致的行为,但是必须传入一个数组(例如Array.New(new object[] { 1.0, 2.0 })
)。
使用控制台API
在Firebug的控制台API允许JavaScript程序写入到控制台(以及一些其他的技巧)。它可以使用,但默认情况下处于禁用状态。要启用它,请使用以下代码:
var engine = new Jurassic.ScriptEngine();
engine.SetGlobalValue("console", new Jurassic.Library.FirebugConsole(engine));
这是在JavaScript中使用控制台对象的示例:
var x = 15, y = 'test';
console.log('X is %i, Y is %s', x, y);
这会在控制台上显示"X is 15, Y is test"
。
目前,Firebug控制台API的功能只有一部分可用。可用的功能有:
- log
- debug
- info
- warn
- error
- assert
- group
- groupEnd
- time
- timeEnd
此外,仅支持以下格式字符串说明符:
说明符 | 类型 |
---|---|
%s | string |
%d | integer |
%i | integer |
%F | floating point number |