Blazor JS interop:如何将未定义传递给JavaScript函数



在blazor项目中,JavaScript函数区分nullundefined。当从C#(await jsRuntime.InvokeAsync<long>("func", null, "str")(传递null时,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);
},

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

如果您想知道在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");

最新更新