ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 第十节:IDBKeyRange 对象 `IDBKeyRange`对象代表数据仓库(object store)里面的一组主键。根据这组主键,可以获取数据仓库或索引里面的一组记录。 `IDBKeyRange`可以只包含一个值,也可以指定上限和下限。它有四个静态方法,用来指定主键的范围。 * `IDBKeyRange.lowerBound()`:指定下限。 * `IDBKeyRange.upperBound()`:指定上限。 * `IDBKeyRange.bound()`:同时指定上下限。 * `IDBKeyRange.only()`:指定只包含一个值。 下面是一些代码实例。 ~~~ // All keys ≤ x var r1 = IDBKeyRange.upperBound(x); // All keys < x var r2 = IDBKeyRange.upperBound(x, true); // All keys ≥ y var r3 = IDBKeyRange.lowerBound(y); // All keys > y var r4 = IDBKeyRange.lowerBound(y, true); // All keys ≥ x && ≤ y var r5 = IDBKeyRange.bound(x, y); // All keys > x &&< y var r6 = IDBKeyRange.bound(x, y, true, true); // All keys > x && ≤ y var r7 = IDBKeyRange.bound(x, y, true, false); // All keys ≥ x &&< y var r8 = IDBKeyRange.bound(x, y, false, true); // The key = z var r9 = IDBKeyRange.only(z); ~~~ `IDBKeyRange.lowerBound()`、`IDBKeyRange.upperBound()`、`IDBKeyRange.bound()`这三个方法默认包括端点值,可以传入一个布尔值,修改这个属性。 与之对应,`IDBKeyRange`对象有四个只读属性。 * `IDBKeyRange.lower`:返回下限 * `IDBKeyRange.lowerOpen`:布尔值,表示下限是否为开区间(即下限是否排除在范围之外) * `IDBKeyRange.upper`:返回上限 * `IDBKeyRange.upperOpen`:布尔值,表示上限是否为开区间(即上限是否排除在范围之外) `IDBKeyRange`实例对象生成以后,将它作为参数输入`IDBObjectStore`或`IDBIndex`对象的`openCursor()`方法,就可以在所设定的范围内读取数据。 ~~~ var t = db.transaction(['people'], 'readonly'); var store = t.objectStore('people'); var index = store.index('name'); var range = IDBKeyRange.bound('B', 'D'); index.openCursor(range).onsuccess = function (e) { var cursor = e.target.result; if (cursor) { console.log(cursor.key + ':'); for (var field in cursor.value) { console.log(cursor.value[field]); } cursor.continue(); } } ~~~ `IDBKeyRange`有一个实例方法`includes(key)`,返回一个布尔值,表示某个主键是否包含在当前这个主键组之内。 ~~~ var keyRangeValue = IDBKeyRange.bound('A', 'K', false, false); keyRangeValue.includes('F') // true keyRangeValue.includes('W') // false ~~~