Go语言中如何判断syscall/js的js.Value对象是否存在?
错误原因
Go 是强类型语言,if 条件仅接受布尔类型的返回值。代码中 cursor 属于 js.Value 类型,Go 不会像 JavaScript 一样自动对该类型做隐式的真值判断,因此触发编译报错。
检查js.Value是否存在的方法
Go 标准库 syscall/js 为 js.Value 类型提供了两个专用方法,用来判断对应 JS 值的状态:
IsUndefined():返回布尔值,代表对应 JS 值是否为undefinedIsNull():返回布尔值,代表对应 JS 值是否为null
要实现和原 JavaScript 代码中 if (cursor) 完全对等的判断逻辑,只需要把条件改为判断 cursor 既不是 undefined 也不是 null 即可。
修改后的代码示例
var ReadAll js.Func ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} { defer ReadAll.Release() cursor := this.Get("result") // 替换原有if cursor的判断逻辑 if !cursor.IsUndefined() && !cursor.IsNull() { _ = cursor.Get("key") value := cursor.Get("value") Window.Call("alert", value) cursor.Call("continue") } else { Window.Call("alert", "No more records") } return nil }) db.ObjectStore.Call("openCursor").Set("onsuccess", ReadAll)
补充:如果需要完全对齐 JavaScript 的隐式真值判断逻辑(包含识别
0、空字符串、false等JS假值),也可以直接调用Bool()方法获取对应布尔值,条件写为if cursor.Bool()即可。
内容的提问来源于stack exchange,提问作者Hasan A Yousef
相关产品推荐
相关产品推荐

