WebSQL:SQLResultSetRowList 中返回的行是否不可变?

2023-12-02

我一直在从 WebSQL 数据库中获取行,并且返回的行似乎是只读的。

    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

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

这怎么可能?如何使一个对象在不被冻结或密封的情况下变得不可变? 以及在哪里规格说应该是这样吗?


更新:这很有趣。它只发生在某些表中。对此仍然一无所知。


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


根据Web SQL 规范 SQLResultSetRowList in SQLResultSet接口是只读的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSQL:SQLResultSetRowList 中返回的行是否不可变? 的相关文章

随机推荐