C# 如何在Jint解释器中解析javascript代码?

C# 如何在Jint解释器中解析javascript代码?,c#,jint,C#,Jint,我想确保javascript代码的语法有效: string test = " var i = 0; "; Jint.Engine ScrptingEngine = new Jint.Engine(); bool result = ScrptingEngine.Parse(test); 您可以使用Execute()方法来“解析”JavaScript,使用GetValue()方法来检索值,然后断言它按预期工作 string test = " var i = 0; "; Jint.Engine Sc

我想确保javascript代码的语法有效:

string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
bool result = ScrptingEngine.Parse(test);

您可以使用
Execute()
方法来“解析”JavaScript,使用
GetValue()
方法来检索值,然后断言它按预期工作

string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
var result = ScrptingEngine.Execute(test).GetValue("i");
Assert.AreEqual(0, result);
此外,如果JavaScript无效,
Execute
方法还将抛出
JavaScriptException

try
{
    ScrptingEngine.Execute("xx = ss == esfx = fuct()"); 
}
catch(JavaScriptException ex) {}

如果将脚本添加到对象,则不应运行任何代码

var myscript = @"
var badFunction = function(){/* please don't run this*/ } 
badFunction ();"

new Engine().Execute("var noRun = {" + myscript + "}");

虽然无法保证脚本本身不会破坏封装中的对象。

调用JavaScriptParser怎么样

Esprima.JavaScriptParser parser = new Esprima.JavaScriptParser(script);
parser.ParseScript();
当您将Jint添加到项目中时,您还将获得Esprima名称空间,这就是Jint在内部使用的名称空间(如果我正确阅读了源代码)


然后您可以捕获一个
Esprima.ParserException

您是正确的,但是Execute实际上会运行代码,我认为这不是一个好主意。如果目前无法在不运行代码的情况下验证代码,我仍然会将此答案标记为正确。@YongkeBillYu在不实际运行的情况下验证JavaScript非常棘手,需要一个强大的AST解析器。我不知道jint是否支持这一点,我在api的任何地方都没有看到验证方法。你能把我链接到api吗?@YongkeBillYu当然。我只能在GitHub上找到有限的自述文件@YongkeBillYu查看源代码时,它显然使用了ast,但我无法找到解析方法。