You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何判断syscall/js的js.Value对象是否存在?

错误原因

Go 是强类型语言,if 条件仅接受布尔类型的返回值。代码中 cursor 属于 js.Value 类型,Go 不会像 JavaScript 一样自动对该类型做隐式的真值判断,因此触发编译报错。

检查js.Value是否存在的方法

Go 标准库 syscall/js 为 js.Value 类型提供了两个专用方法,用来判断对应 JS 值的状态:

  • IsUndefined():返回布尔值,代表对应 JS 值是否为 undefined
  • IsNull():返回布尔值,代表对应 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:15:02