IndexedDB 的多查询很奇怪

IndexedDB's multi-query is weird

我做到了.createIndex('abcIDX', ['A', 'B', 'C'])

但是,我觉得结果很奇怪,所以我做了以下测试。

// All methods except "IDBKeyRange.only()" are weird.;
const range = IDBKeyRange.lowerBound( [5,5,5] );

function test( arr ) {
  console.log( range.includes(arr) );
}

test([5,5,5]); // case1: true
test([5,5,1]); // case2: false
test([5,6,1]); // case3: true ?
test([6,1,1]); // case4: true ??
test([1,6,1]); // case5: false ??

我认为 IDBKeyRange 的工作方式与 A && B && C 相同。

案例 1 和案例 2 是正确的。

但情况 3 和情况 4 不是。所以我猜它适用于 ||,而不适用于 &&

然而,案例2和案例5表明推测是错误的。

Whosebug 表现出色 answer。这是我阅读此答案后的理解。

It's work A || (A && B) || (A && B && C).

然而,案例2表明推测是错误的。

我哪里错了?还是我用错了?请帮助我...

如果将数字映射到字符,并想到字符串比较,比较可能更容易理解。 A=1,B=2,E=5,F=6。所以 [5,5,5] 是“EEE”

range = IDBKeyRange.lowerBound( [5,5,5] ); // think of this as "EEE"

test([5,5,5]); // case1: "EEE" >= "EEE" ? true
test([5,5,1]); // case2: "EEA" >= "EEE" ? false
test([5,6,1]); // case3: "EFA" >= "EEE" ? true
test([6,1,1]); // case4: "FAA" >= "EEE" ? true
test([1,6,1]); // case5: "AFA" >= "EEE" ? false

实际逻辑基本上是:

((test[0] >  range[0])) ||
((test[0] == range[0]) && (test[1] >  range[1])) ||
((test[0] == range[0]) && (test[1] == range[1]) && (test[2] >= range[2]))