ClearScript V8 JS 无法使用箭头函数和修改解构值

问题描述 投票:0回答:1

更新1:很有趣

(
       function({ value }){ 
          return value * 2;
       }
)

工作得很好(以及“-”、“/”)。我并不是想变得可悲,但这对于一个已经存在了大约十年的项目来说看起来是一个相当基本的错误,这个项目还在维护吗?


我将 C# 与 Microsoft.ClearScript.V8 + Microsoft.ClearScript.V8.Native.win-x64 v7.4.3 结合使用

有几个问题:

  1. 我们什么时候可以使用箭头功能

    "=>"
    ,因为它们目前似乎根本不起作用。

  2. 使用以下简单的 JS 脚本,由于异常,我无法修改解构值:

脚本:

   (
       function({ value }){ 
          return value + 1;
       }
    )

输入:

{ value: 1 }

重组部分有效(只需删除+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)
v8 clearscript
1个回答
0
投票

你能分享更多你的代码吗?以下似乎工作完美:

using var v8 = new V8ScriptEngine();
Console.WriteLine(v8.Evaluate(@"
    (
        function({ value }) { return value + 1; }
    )({ value: 1 })
"));
Console.WriteLine(v8.Evaluate(@"
    (
        ({ value }) => value + 2
    )({ value: 2 })
"));

正如预期的那样,这会打印出“2”和“4”。你有什么不一样的做法吗?

© www.soinside.com 2019 - 2024. All rights reserved.