Ser*_*eyS 6 javascript blazor blazor-webassembly
在 blazor 项目中,JavaScript 函数区分null和undefined。当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)
如果您想知道 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)