我一直在从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
我必须手动克隆该行才能修改它。
这怎么可能?如何在不冻结或密封的情况下使物体变得不可变? 在the specs中说它应该是那样的?
更新:这很有趣。它只发生在一些表中。仍然无能为力。
更新2:不,它发生在我读的每个表中。似乎是与Chrome相关的东西(也发生在Opera中,因此它可能是一个webkit行为)。
答案 0 :(得分:3)
根据SQLResultSetRowList
中的SQLResultSet
{{1}}界面只读取。