Test IndexedDB's cursor value property. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". dbname = "cursor-value.html" indexedDB.deleteDatabase(dbname) indexedDB.open(dbname) db.createObjectStore('store') testCursor(): transaction = db.transaction('store', 'readwrite') store = transaction.objectStore('store') store.put({a: 1, b: 10}, 'key1') store.put({a: 2, b: 20}, 'key2') store.put({a: 3, b: 30}, 'key3') store.put({a: 4, b: 40}, 'key4') store.put({a: 5, b: 50}, 'key5') request = store.openCursor() ---------- Value at index: 0 cursor = request.result PASS cursor.key is expectedKey Check expected values: PASS cursor.value.a is expectedA PASS cursor.value.b is expectedB PASS cursor.value.foo is undefined Modify values: cursor.value.a = 3 delete cursor.value.b cursor.value.foo = 'bar' Ensure modifications are retained: PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object value survives gc gc() PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object identity localValueRef = cursor.value PASS localValueRef is cursor.value ---------- Value at index: 1 cursor = request.result PASS cursor.key is expectedKey Check expected values: PASS cursor.value.a is expectedA PASS cursor.value.b is expectedB PASS cursor.value.foo is undefined Modify values: cursor.value.a = 3 delete cursor.value.b cursor.value.foo = 'bar' Ensure modifications are retained: PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object value survives gc gc() PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object identity localValueRef = cursor.value PASS localValueRef is cursor.value ---------- Value at index: 3 cursor = request.result PASS cursor.key is expectedKey Check expected values: PASS cursor.value.a is expectedA PASS cursor.value.b is expectedB PASS cursor.value.foo is undefined Modify values: cursor.value.a = 3 delete cursor.value.b cursor.value.foo = 'bar' Ensure modifications are retained: PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object value survives gc gc() PASS cursor.value.a is 3 PASS cursor.value.b is undefined PASS cursor.value.foo is 'bar' Check object identity localValueRef = cursor.value PASS localValueRef is cursor.value ensureModificationsNotPersisted(): transaction = db.transaction('store', 'readonly') store = transaction.objectStore('store') request = store.openCursor() cursor = request.result PASS cursor.key is 'key1' Check expected values: PASS cursor.value.a is 1 PASS cursor.value.b is 10 PASS cursor.value.foo is undefined PASS successfullyParsed is true TEST COMPLETE