Golang中如何检查js.Valu是否存在

Golang中如何检查js.Valu是否存在 在 JavaScript 代码中,我有:

request.onsuccess = function(event) {
    var cursor = event.target.result;
    if(cursor){ }
}

在我等效的 Go 代码中,我写了:

ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		defer ReadAll.Release()
		cursor := this.Get("result")

		if cursor { }
}

但在编译时,我遇到了:

non-bool cursor (type js.Value) used as if condition

如何检查相关的 js.value 是否存在?


更多关于Golang中如何检查js.Valu是否存在的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

也许你想使用 Truthy 方法?

更多关于Golang中如何检查js.Valu是否存在的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


NobbZ:

Truthy 方法?

谢谢,这正是解决我问题的方法 js 包 - syscall/js - Go 包

在Go中,js.Value不能直接用作布尔条件判断。你需要使用js.ValueIsUndefined()IsNull()Truthy()方法来检查其是否存在或为真值。

以下是几种检查方式:

1. 检查是否为undefined或null

ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    defer ReadAll.Release()
    cursor := this.Get("result")
    
    // 检查是否为undefined
    if !cursor.IsUndefined() {
        // cursor存在且不是undefined
    }
    
    // 检查是否为null
    if !cursor.IsNull() {
        // cursor存在且不是null
    }
    
    // 同时检查undefined和null
    if !cursor.IsUndefined() && !cursor.IsNull() {
        // cursor存在且不是undefined也不是null
    }
    
    return nil
})

2. 使用Truthy()方法(最接近JavaScript的if判断)

ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    defer ReadAll.Release()
    cursor := this.Get("result")
    
    if cursor.Truthy() {
        // 相当于JavaScript中的 if(cursor)
        // 会检查:不是undefined、不是null、不是false、不是0、不是空字符串等
    }
    
    return nil
})

3. 检查特定类型的值

ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    defer ReadAll.Release()
    cursor := this.Get("result")
    
    // 检查是否为对象且不为空
    if cursor.Type() == js.TypeObject && cursor.Truthy() {
        // cursor是一个有效的对象
    }
    
    return nil
})

4. 完整示例

ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    defer ReadAll.Release()
    
    event := args[0]
    cursor := event.Get("target").Get("result")
    
    // 最常用的方式 - 类似JavaScript的if(cursor)
    if cursor.Truthy() {
        // 执行cursor存在的逻辑
        fmt.Println("Cursor exists:", cursor)
        
        // 可以继续访问cursor的属性
        if cursor.Get("value").Truthy() {
            value := cursor.Get("value")
            // 处理value
        }
    } else {
        fmt.Println("Cursor is falsy (null, undefined, false, 0, or empty)")
    }
    
    return nil
})

Truthy()方法的行为最接近JavaScript的布尔转换规则,它会根据JavaScript的truthy/falsy规则返回相应的布尔值。对于你的使用场景,if cursor.Truthy()是最接近原始JavaScript代码if(cursor)的写法。

回到顶部