Blazor JS 互操作:如何将 undefined 传递给 JavaScript 函数

Ser*_*eyS 6 javascript blazor blazor-webassembly

在 blazor 项目中,JavaScript 函数区分nullundefined。当null从 C# ( await jsRuntime.InvokeAsync<long>("func", null, "str")) 传递时,JS 端接收值null( typeof arg1 === 'object')。从 C# 端传递什么来接收undefined( typeof arg1 === 'undefined')?

编辑:显然 的行为null并不一致,这取决于参数的位置。JS:

        func1: function (arg1) {
            console.log("func1", typeof arg1);
        },
        func2: function (arg1, arg2) {
            console.log("func2", typeof arg1);
        },
Run Code Online (Sandbox Code Playgroud)

C#:

        await jsRuntime.InvokeVoidAsync("utils.func1", null);
        await jsRuntime.InvokeVoidAsync("utils.func1");
        await jsRuntime.InvokeVoidAsync("utils.func1", "aaa");
        await jsRuntime.InvokeVoidAsync("utils.func2", null, 123);
        await jsRuntime.InvokeVoidAsync("utils.func2", "aaa", 123);
Run Code Online (Sandbox Code Playgroud)

输出:

func1 undefined
func1 undefined
func1 string
func2 object
func2 string
Run Code Online (Sandbox Code Playgroud)

Eli*_*seo 1

如果您想知道 JavaScript 函数中是否发送参数或是否为 null,您可以使用===undefined===null

<script>
    var func1=(arg1)=> {
        console.log("func1", arg1,arg1===null,arg1===undefined,typeof arg1);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

但你需要发送“null明确”

    var data = (string)null; //<--I check with this
    await JSRuntime.InvokeAsync<string>("func1","Hello world");
    await JSRuntime.InvokeAsync<string>("func1", data);
    await JSRuntime.InvokeAsync<string>("func1");
Run Code Online (Sandbox Code Playgroud)