indexedDB get() 方法中 'Number()' 的目的是什么

What is the purpose of 'Number()' in indexedDB get() method

根据下面链接的文档,get() 有一个参数:key。在描述中是:

Key identifying the record to be retrieved. This can also be an IDBKeyRange in which case the function retreives the first existing value in that range.

在下面的示例代码中,使用get(Number("1")),将找到该记录。仅使用 get("1"),结果为空。 (primary/only键是'num',是自动递增的。)

function removeRecord(num) {
    var transaction = db.transaction(['queueStore'], 'readwrite');
    var store = transaction.objectStore('queueStore');

    // Check if the record exists & to identify the record
    store.get(Number(num)).onsuccess = function(event) {
        /*      ^ here     this works  */
        var result = event.target.result;
        if(result) {
            number = result.number;
        }
    };
}

我无法在 Indexed Database API 中或通过搜索找到答案。

Number 有什么作用?

Number 构造函数在作为函数调用时(即没有 new)将参数转换为数字并 returns 该值。所以,Number("1") returns 数 1.

明确编码 Number("1") 没有意义;您只需使用 1。如果您知道您可能会得到一个字符串值,这将很有用。在你的例子中,API 正在对你的密钥进行精确比较,如果真正的密钥是一个数字,那么它永远不会 === 任何字符串。

一元运算符 + 本质上做同样的事情,所以 +"1" 也是 1。有些人更喜欢显式调用 Number(),因为它更显式。

parseFloat()函数将字符串转换为数字,但不同于Number()构造函数或一元+parseFloat() 将允许在输入字符串末尾包含非数字内容:

console.log(parseFloat("123hello world")); // 123
console.log(+"123hello world"); // NaN