检查 firebase 实时数据库中是否存在某个字段
Checking for existence of a field in firebase real-time database
对于 firebase 函数,我们有时可能需要检查实时数据库中的某个字段是否存在,例如,我们可能会遍历实时数据库中的所有用户记录,而只有部分用户可能有一个字段,比如“汽车”。据我了解 ,我们可以调用 exists()
或检查 null.
第一个是检查 car
是否存在:
if(dataSnapshot.child("car").exists()) {
//Do something
}
第二个是检查 car
字段是否为空:
if(dataSnapshot.child("car").val() != null) {
//Do the other thing
}
问题是,这两种方式如何比较,首先,在结果上? exists() === false
与 null
相同,exists() === true
与 !null
相同,或者是否有任何特殊情况需要考虑?其次,性能如何?与 exists()
的函数调用相比,空检查是否更快,是否使用更少的资源(内存等)?还是纯粹是preference/taste的问题?
看看API源代码就可以找到答案。
让我们从 .exists() 方法开始。在 this link(第 361 行)处,您可以看到 exists 方法执行对基础 isEmpty() 方法的调用。
在同一个文件中,在第462行,我们可以看到val()方法的实现:它调用了内部节点的val()方法。好吧,让我们看一下:在 this link,第 197 行,您可以看到 val() 方法要做的第一件事就是调用 isEmpty() 方法,如果它为真, 它将 return 一个空值。
这告诉我们这两种方法(使用 exists() 或评估 val() 的 return 值并检查它是否为空)给出相同的结果。
让我们来看看性能方面:两种方式的性能相同。如果要集中调用这些方法,exists() 会执行较少的内部调用,因此它应该是首选。
对于 firebase 函数,我们有时可能需要检查实时数据库中的某个字段是否存在,例如,我们可能会遍历实时数据库中的所有用户记录,而只有部分用户可能有一个字段,比如“汽车”。据我了解 exists()
或检查 null.
第一个是检查 car
是否存在:
if(dataSnapshot.child("car").exists()) {
//Do something
}
第二个是检查 car
字段是否为空:
if(dataSnapshot.child("car").val() != null) {
//Do the other thing
}
问题是,这两种方式如何比较,首先,在结果上? exists() === false
与 null
相同,exists() === true
与 !null
相同,或者是否有任何特殊情况需要考虑?其次,性能如何?与 exists()
的函数调用相比,空检查是否更快,是否使用更少的资源(内存等)?还是纯粹是preference/taste的问题?
看看API源代码就可以找到答案。
让我们从 .exists() 方法开始。在 this link(第 361 行)处,您可以看到 exists 方法执行对基础 isEmpty() 方法的调用。
在同一个文件中,在第462行,我们可以看到val()方法的实现:它调用了内部节点的val()方法。好吧,让我们看一下:在 this link,第 197 行,您可以看到 val() 方法要做的第一件事就是调用 isEmpty() 方法,如果它为真, 它将 return 一个空值。
这告诉我们这两种方法(使用 exists() 或评估 val() 的 return 值并检查它是否为空)给出相同的结果。
让我们来看看性能方面:两种方式的性能相同。如果要集中调用这些方法,exists() 会执行较少的内部调用,因此它应该是首选。