2013-11-15 24 views
4

我一直在從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行爲)。

+1

相關:http://stackoverflow.com/questions/5093870/immutable-chrome-sqlite-return-objects –

回答

3

根據Web SQL SpecSQLResultSetRowList in SQLResultSet接口是隻讀的。

+0

行列表也許,但行? –

+0

@MisterSmith它也是隻讀的。 –

+0

關於是否應該只讀行的spec中沒有任何內容。 「SQLResultSet」的屬性被定義爲只讀的,也是'SQLResultSetRowList'中的'length'屬性,但不是返回列表中的項目。我認爲WebKit開發人員是靠自己做的。這是驚人的,因爲傳統JavaScript中不存在只讀對象。 –

相關問題