- From: Joshua Bell <jsbell@chromium.org>
- Date: Fri, 16 Sep 2011 15:23:17 -0700
- To: public-webapps@w3.org
- Message-ID: <CAD649j4wq=JdtGr2zWr=znDmi-cLdkbNToVu-ntS48_xMkWTOQ@mail.gmail.com>
There appears to be a minor edge case in the IndexedDB draft ( http://www.w3.org/TR/IndexedDB) - and inconsistencies between implementations - for the ECMAScript "negative zero" number value. While the other numeric edge cases - NaN and +/-Infinity - are called out explicitly in the draft when discussing keys, negative zero is not. The intended handling of -0 in values could, in theory, be covered by the HTML5 structured clone algorithm ( http://www.w3.org/TR/html5/common-dom-interfaces.html#safe-passing-of-structured-data), but it also has no explicit mention of -0. In Chrome 14, -0 and 0 are treated as the same key, and -0 values are read back as 0. In Firefox 6, -0 is preserved as a value, but 0 and -0 are treated as the same key. (I have not tested IE10) e.g. store.put(-0, 'key for -0'); store.put('value for key -0', -0); store.put('value for key 0', 0); store.get('key for -0').onsuccess = function (e) { assertEqual(-0, e.target.result, '-0 as a value'); }; store.get(-0).onsuccess = function (e) { assertEqual('value for key -0', e.target.result, '-0 as a key'); }; .... for some suitably -0-aware assertEqual comparison - e.g. http://wiki.ecmascript.org/doku.php?id=harmony:egal This will "fail" in both cases in Chrome 14, and "fail" in the second case only in Firefox 6. In other words, in at least these two current implementations, -0 is treated as the same key as 0. However, the two current implementations disagree about storing/retrieving -0 values. Should the draft codify the handling of -0 in keys? And is the handling of -0 in values properly deferred to the structured clone algorithm? -- Josh
Received on Friday, 16 September 2011 23:46:49 UTC