标记为已检查的答案并不完全正确。
您不能在包含 Boolean JavaScript 类型的值的属性上创建索引。另一个答案的那部分是正确的。如果你有一个类似的对象var obj = {isActive: true};
,尝试创建索引obj.isActive
将不起作用,浏览器将报告错误消息。
但是,您可以轻松模拟所需的结果。indexedDB 不会将对象中不存在的属性插入索引。因此,您可以定义一个属性来表示真,而不是定义一个属性来表示假。当属性存在时,对象将出现在索引中。当属性不存在时,对象不会出现在索引中。
例子
例如,假设您有一个“obj”对象的对象存储。假设您想在isActive
这些对象的属性上创建一个类似布尔值的索引。
首先在 isActive 属性上创建一个索引。在 onupgradeneeded 回调函数中,使用store.createIndex('isActive','isActive');
要表示对象的“真”,只需使用obj.isActive = 1;
. 然后将对象添加或放入对象存储中。当您要查询设置的所有对象isActive
时,只需使用db.transaction('store').index('isActive').openCursor();
.
要表示假,只需使用delete obj.isActive;
然后添加或或将对象放入对象存储中。
当您查询isActive
设置了所有对象时,这些缺少该isActive
属性的对象(因为它已被删除或从未设置)在使用游标迭代时不会出现。
瞧,一个布尔索引。
性能说明
像在此处使用的示例中所做的那样在索引上打开游标将提供良好的性能。小数据时性能上的差异并不明显,但在存储大量对象时非常明显。无需采用一些第三方库来完成“布尔索引”。这是您可以自己完成的平凡而简单的功能。您应该尽量使用本机功能。