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 回复
NobbZ:
Truthy方法?
谢谢,这正是解决我问题的方法 js 包 - syscall/js - Go 包
在Go中,js.Value不能直接用作布尔条件判断。你需要使用js.Value的IsUndefined()、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)的写法。

