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

Re: typeof document.all

From: Maciej Stachowiak <mjs@apple.com>
Date: Tue, 13 Oct 2009 12:06:20 -0700
Cc: HTML WG <public-html@w3.org>
Message-id: <1D4FC858-F3D4-482F-8046-34D07E60F3CF@apple.com>
To: Brendan Eich <brendan@mozilla.org>

On Oct 13, 2009, at 10:54 AM, Brendan Eich wrote:

> On Oct 13, 2009, at 3:28 AM, Maciej Stachowiak wrote:
>
>> On Oct 13, 2009, at 1:11 AM, Brendan Eich wrote:
>>
>>> On Oct 13, 2009, at 12:32 AM, Maciej Stachowiak wrote:
>>>
>>>>> For document.all, which is also falsy (not just in  
>>>>> ToBoolean(document.all) -> false as I thought, but also in being  
>>>>> == null and == undefined as you wrote -- and === as well I  
>>>>> presume), special care will be needed.
>>>>
>>>> It's specifically *not* strict-equal to null and undefined, at  
>>>> least in WebKit.
>>>
>>> Why not === undefined if the object masquerades as undefined?  
>>> JSLint has caused some document.all === undefined tests to arise,  
>>> if my memory serves (I will have to check tomorrow).
>>
>> We're not aware of any problems with it, but they could be latent  
>> bugs, and it's certainly something we can change.
>
> I'm not sure this is an issue. The Firefox pre-1.0 undetected  
> document.all support evolved from not supporting === undefined at  
> first, to supporting it as we've discussed, with history recorded in  
> this bug, where the === undefined idea was raised in the linked  
> comment:
>
> https://bugzilla.mozilla.org/show_bug.cgi?id=253150#c5
>
> I recall suspecting at the time that JSLint or the teachings that it  
> reflects, which favor fanatical use of === over ==, would leave some  
> document.all tests broken if we didn't support === undefined.
>
> Here's an overbroad google codesearch for " === undefined":
>
> http://www.google.com/codesearch?hl=en&lr=&q=lang%3Ajavascript+%22+%3D%3D%3D+undefined%22&sbtn=Search
>
> The results here IMHO argue for conservatism in the absence of  
> evidence, i.e., evaluating document.all in (document.all ===  
> undefined) to undefined.

This search finds only one hit for "document.all === undefined", which  
is a Mozilla regression test:

http://www.google.com/codesearch?hl=en&lr=&q=lang%3Ajavascript+%22document.all+%3D%3D%3D+undefined%22&sbtn=Search

I could be convinced, but the Google code search does not seem  
terribly persuasive.

>>
>> I'm still hoping to come to a conclusion about the general case of  
>> where Web IDL properties live.
>
> Should we do that (or continue to do that; bz has a thread going)  
> elsewhere? public-script-coord seems best.

Yes, public-script-coord would be better.


>>>
>>> ECMA-262 does not specify abstract syntax at all. If there were a  
>>> bytecode for the comma operator (it would be a nop), it could be  
>>> skipped (we used to do exactly that for decompiler support). So  
>>> either way, comma is doable.
>>
>> I think if you want to actually specify the behavior, you have to  
>> mention what happens for parens and comma, even though they are not  
>> represented in SpiderMonkey bytecode. Other engines may not have a  
>> sufficiently-similar bytecode stream to peek at.
>
> Let's stop fencing over minutiae. I was clearly describing what  
> SpiderMonkey does. As I noted, it even used to have a JSOP_GROUP no- 
> op, which the detecting code skipped.
>
> Yes, a spec should be phrased in terms of ECMA-262's grammar. But  
> since you said what WebKit did, my response was equally concrete in  
> terms of SpiderMonkey. Are we done? I fear no good deed goes  
> unpunished.

The only point I wanted to establish is that "do exactly what Gecko  
does" is probably not suitable for a spec, because the exact behavior  
seems to depend too much on SpiderMonkey-specific details. I can't  
even tell if you disagree with this point, since you're advocating a  
loose spec rather than a "do what Gecko does" spec.

It's not a matter of point-scoring, it's a matter of considering the  
possibilities and eliminating ones that don't seem to work. Please  
don't be defensive. I snipped all the other instances where you got  
irked at me for pointing out that the exact Gecko behavior is (in my  
opinion) not suitable to put in a spec as-is. No one is advocating  
that option so it doesn't seem important to discuss. If you do want to  
advocate a "do what Gecko does" spec then we can come back to this  
conversation.


>
>
>> I'm generally against making the spec more open-ended, but I don't  
>> have a very strong case against it in this particular instance. I  
>> would like to hear some input from people besides the two of us.
>
> Anne replied, but I still do not know exactly what Opera does.  
> Vagueness does not help here. Your list was good (explicit mention  
> of === undefined not evaluating to true would be great). I'd  
> appreciate the same from an Opera person -- I'll see if some old  
> contacts who've hacked on Futhark can help.

I talked to Anne and James Graham about this on IRC last night. From  
their report, and from testing, I believe Opera implements the exact  
same three exceptional behaviors for the all collection that I listed  
for WebKit.

[... large snip ...]

>
> HTML5 does not yet have a spec browsers can implement from scratch.  
> It lacks explicit details about all the operators.

I think the idea is that no operations are modified other than the  
ones mentioned.


>
>
>>>> So I think the options for document.all are: (1) design a variant  
>>>> of the Gecko behavior that is suitable to put in a standard; (2)  
>>>> go with something closer to the WebKit behavior;
>>>
>>> Who says (2) is suitable to put in a standard? The HTML5 draft  
>>> explicitly acknowledges that it does not conform to ECMA-262.
>>
>> I don't think conflicting with ECMA-262 is a showstopper for  
>> putting something in HTML5.
>
> You didn't call it a showstopper, but you raised it as an issue and  
> laid it at ES5's feet:
>
> https://mail.mozilla.org/pipermail/es-discuss/2009-September/009844.html

Yes, I think it's a problem, but not one that would lead us to stop  
the presses on either ES5 or HTML5.


>
>>>> (3) write the spec loosely enough that either behavior is  
>>>> conforming, but the spec gives enough guidance that you can  
>>>> implement sufficiently compatible behavior by reading it;
>>>
>>> In case it's not clear, I'm favoring 3. Wait, it was clear. :-/
>>
>> It wasn't clear to me, but thanks for being clear now.
>
> How many times do I have to call explicitly for underspecifying?

I think your position is crystal clear now (to me at least, and I hope  
to everyone else).

>
>> I don't think there is anything seriously wrong with this option,  
>> though I'm not sure offhand how to describe the required behavior.  
>> Do you have a suggestion for how this could be written up?
>
> I'm trying to get to one, if you can stop trying to "win".

I would ask you to assume good faith, in the interests of productive  
conversation.

Regards,
Maciej
Received on Tuesday, 13 October 2009 19:06:57 UTC

This archive was generated by hypermail 2.3.1 : Monday, 29 September 2014 09:39:09 UTC