Blazor JS互操作:如何将未定义传递给JavaScript函数

时间:2020-09-27 08:11:16

标签: javascript blazor blazor-webassembly

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

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

        func1: function (arg1) {
            console.log("func1", typeof arg1);
        },
        func2: function (arg1, arg2) {
            console.log("func2", typeof arg1);
        },

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);

输出:

func1 undefined
func1 undefined
func1 string
func2 object
func2 string

1 个答案:

答案 0 :(得分:1)

如果您想知道是在JavaScript函数中发送自变量还是null,则可以使用===undefined===null

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

但是您需要发送“空显式”

    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");