ClearScript V8 v7.4.3:箭头函数不可用及解构值修改报错咨询
使用Microsoft.ClearScript.V8 v7.4.3遇到的问题及疑问
本人在C#环境中使用Microsoft.ClearScript.V8及Microsoft.ClearScript.V8.Native.win-x64 v7.4.3版本,遇到以下问题并存在疑问:
问题1:箭头函数完全无法使用
当前版本完全无法使用箭头函数(=>),咨询该功能何时开放。
问题2:解构参数函数中+1操作抛出语法错误
编写接收解构参数的JS函数时,对解构出的value执行+1操作会抛出SyntaxError异常(报错信息中+号被截断),但*、-、/运算可正常运行。
细节补充
更新1:以下代码可正常运行(-、/运算同样正常):
( function({ value }){ return value * 2; } )
问题复现代码
脚本代码:
( function({ value }){ return value + 1; } )
输入参数:{ value: 1 }
报错信息
Microsoft.ClearScript.ScriptEngineException: SyntaxError: Unexpected number ---> Microsoft.ClearScript.ScriptEngineException: SyntaxError: Unexpected number at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.ThrowScheduledException() at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.Invoke[T](Func`2 func) at Microsoft.ClearScript.V8.SplitProxy.V8ContextProxyImpl.Execute(UniqueDocumentInfo documentInfo, String code, Boolean evaluate) at Microsoft.ClearScript.V8.V8ScriptEngine.ExecuteRaw(UniqueDocumentInfo documentInfo, String code, Boolean evaluate) at Microsoft.ClearScript.V8.V8ScriptEngine.ExecuteInternal(UniqueDocumentInfo documentInfo, String code, Boolean evaluate) at Microsoft.ClearScript.V8.V8ScriptEngine.<>c__DisplayClass130_0.<Execute>b__0() at Microsoft.ClearScript.ScriptEngine.ScriptInvokeInternal[T](Func`1 func) at Microsoft.ClearScript.V8.V8ScriptEngine.<>c__DisplayClass137_0`1.<ScriptInvoke>b__0() at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyManaged.InvokeHostAction(IntPtr pAction) --- Script error details follow --- SyntaxError: Unexpected number at Script [temp]:1:46 -> ( function({ value }){ return value 1; }) --- End of inner exception stack trace --- at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.ThrowScheduledException() at Microsoft.ClearScript.V8.SplitProxy.V8SplitProxyNative.Invoke(Action`1 action) at Microsoft.ClearScript.V8.SplitProxy.V8ContextProxyImpl.InvokeWithLock(Action action) at Microsoft.ClearScript.V8.V8ScriptEngine.ScriptInvoke[T](Func`1 func) at Microsoft.ClearScript.V8.V8ScriptEngine.Execute(UniqueDocumentInfo documentInfo, String code, Boolean evaluate) at Microsoft.ClearScript.ScriptEngine.Evaluate(UniqueDocumentInfo documentInfo, String code, Boolean marshalResult) at Microsoft.ClearScript.ScriptEngine.Evaluate(DocumentInfo documentInfo, String code) at Microsoft.ClearScript.ScriptEngine.Evaluate(String documentName, Boolean discard, String code) at Microsoft.ClearScript.ScriptEngine.Evaluate(String documentName, String code) at Microsoft.ClearScript.ScriptEngine.Evaluate(String code)
使用场景代码(C#)
using (var v8 = new V8ScriptEngine()) { dynamic evaluateScript = v8.Evaluate(script); var inputs = data.ToObject(); var result = evaluateScript(inputs); return JsonConvert.SerializeObject(result); }
辅助转换方法(C#)
public static object ToObject(this string s) { if (new[] { "{", "}", ":" }.Any(s.Contains)) { try { return JsonConvert.DeserializeObject<ExpandoObject>(s)!; } catch (Exception ex) { return s; } } else if (s.ToCharArray().Any(char.IsDigit)) { if (s.Contains(".") && double.TryParse(s, out var @double)) { return @double; } else if (int.TryParse(s, out var @int)) { return @int; } else { return s; } } else { return s; } }
维护状态疑问
发现该项目已有十年历史,质疑是否仍在维护。
内容的提问来源于stack exchange,提问作者user1514042
相关产品推荐
相关产品推荐

