在blazor项目中,JavaScript函数可区分null
和undefined
。从C#(null
传递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);
},
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
答案 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");