W3C home > Mailing lists > Public > public-html@w3.org > July 2009

Re: typeof document.all

From: Ian Hickson <ian@hixie.ch>
Date: Tue, 14 Jul 2009 04:59:59 +0000 (UTC)
To: Simon Pieters <simonp@opera.com>, Maciej Stachowiak <mjs@apple.com>, Thomas Broyer <t.broyer@ltgt.net>
Cc: "public-html@w3.org" <public-html@w3.org>
Message-ID: <Pine.LNX.4.62.0907140408110.23663@hixie.dreamhostps.com>
On Fri, 19 Jun 2009, Simon Pieters wrote:
> There is interop between Opera, WebKit and Firefox that typeof 
> document.all returns 'undefined'. I think this is needed for Web compat.

On Fri, 19 Jun 2009, Maciej Stachowiak wrote:
> Here are the special behaviors WebKit ensures for document.all:
> - document.all is false when tested in a boolean comparison, so if
> (document.all) checks fail
> - the expression !document.all evaluates to true
> - the following expression evaluates to true: document.all == undefined
> - the following expression evaluates to true: document.all == null
> - the following expression evaluates to false: document.all != undefined
> - the following expression evaluates to false: document.all != null
> - the expression "typeof document.all" returns the string "undefined"

I've required the above.

On Fri, 19 Jun 2009, Thomas Broyer wrote:
> Doing some additional tests:
>  - Opera (9.64), FF (3.0.11) and Safari (4) all report document.all as
> [object HTMLCollection] in their JS console; Chrome (3) on the other
> hand reports it as undefined; however, all four browsers agree that
> document.all.toString() is "[object HTMLCollection]", it might just be
> how the JS console is implemented?

I've gone with the non-Chrome behaviour here.

>  - All four browsers return true for ("all" in document), I would have 
> expect a false here (this is explicitly allowed by ECMAScript, ยง8.6.2: 
> "Host objects may implement these methods in any manner unless specified 
> otherwise; for example, one possibility is that [[Get]] and [[Put]] for 
> a particular host object indeed fetch and store property values but 
> [[HasProperty]] always generates false.")

I've remained compatible with the deployed UAs on this.

>  - Opera and FF return false for document.hasOwnProperty("all"); this
> is inconsistent with the above, given that document.prototype is null
> (the property exists according to [[HasProperty]], it cannot be in the
> prototype chain as there is not prototype, but it doesn't exist on the
> object, so where is it?!) Chrome and Safari return true.

I've gone with the Chrome/Safari behaviour here.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 14 July 2009 05:00:36 UTC

This archive was generated by hypermail 2.3.1 : Thursday, 29 October 2015 10:15:48 UTC