- From: Simon Pieters <simonp@opera.com>
- Date: Mon, 09 Jul 2007 15:00:27 +0200
- To: "Maciej Stachowiak" <mjs@apple.com>
- Cc: public-html <public-html@w3.org>
On Mon, 09 Jul 2007 12:37:14 +0200, Maciej Stachowiak <mjs@apple.com> wrote: > They are both subtly wrong because, logically, ECMAScript property names > are always strings, and non-string arguments to the [] operator undergo > an implicit toString conversion. > > This is why for ECMAScript arrays, 0, 0.0, .0 and "0" all work as > numeric subscripts for the built-in Array type, but "0.0" and ".0" do > not. > > javascript:alert(["a"][0]) -> a > javascript:alert(["a"]["0"]) -> a > javascript:alert(["a"][0.0]) -> a > javascript:alert(["a"]["0.0"]) -> undefined > javascript:alert(["a"][.0]) -> a > javascript:alert(["a"][".0"]) -> undefined > > The model here is that numeric values get converted to string and then > string-compared with the appropriate string represetnation of an > integer, so it does not matter how they are spelled. But strings undergo > no conversion. Ok. Makes sense. > [...] >> >> 1. If obj is an array, let obj be the array's first item. > > I don't think this is a special rule for arrays, that's just how it > handles strings with a comma. I just tired > javascript:alert(document.links["0,1"]) on a random page in IE and it > gave me the first element of the links array. Ah. I didn't consider testing commas. Testing further, it seems that IE does the same for a lot of characters (but also doesn't for a lot of characters). http://simon.html5.org/test/html/dom/htmlcollections/item-vs-namedItem/033.htm The other browsers don't do this at all. Hopefully that is an indicator that it isn't needed for compat with legacy content. >> 2. If obj is an integer, a float or Infinity, then pass that to .item() >> and abort these steps. >> >> 3. If obj is a string, check whether the string matches the regex >> /^(\d+)(\..*)?$/. If it does, pass $1 to .item() and abort these >> steps. >> >> 4. Pass obj.toString() to .namedItem(). > > I think all of these steps are actually operating on strings, not > general JavaScript values, so to correctly document what IE does you > would have to reformulate purely in terms of strings. Ok. I also realised that I did a mistake in my testing: I used 0/0 when I meant 1/0. Infinity isn't treated specially. -- Simon Pieters Opera Software
Received on Monday, 9 July 2007 13:00:45 UTC