我一直在從WebSQL數據庫中提取行,並且返回的行似乎是隻讀的。WebSQL:SQLResultSetRowList中的返回行是不可變的嗎?
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行爲)。
相關:http://stackoverflow.com/questions/5093870/immutable-chrome-sqlite-return-objects –