我一直在从 WebSQL DB 中获取行,返回的行似乎是只读的。

    db.readTransaction(
        function(t1) {
            t1.executeSql(
                "SELECT * FROM Foo WHERE id = ?",
                [1],
                function(t2, resultSet){
                    var foo = resultSet.rows.item(0);

                    console.log("before: " + foo.col1);
                    foo.col1 = "new value";
                    console.log("after: " + foo.col1);
                    console.log("sealed? " + Object.isSealed(foo));
                    console.log("frozen? " + Object.isFrozen(foo));
                }
            );
        }
    );

它打印:
    before: old value
    after: old value
    sealed? false
    frozen? false

我必须手动克隆该行才能对其进行修改。

这怎么可能?如何在不卡住或密封的情况下使对象不可变?
the specs 中哪里说应该是这样?

更新:这很有趣。它只发生在某些表中。对此还是一窍不通。

更新 2:不,它发生在我读取的每个表中。似乎与 Chrome 相关(也在 Opera 中发生,所以它可能是一种 webkit 行为)。

最佳答案

根据Web SQL Spec SQLResultSetRowList 中的SQLResultSet 接口(interface)是只读的。

关于javascript - WebSQL : Are returned rows in SQLResultSetRowList immutable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19999906/

10-08 23:52