Interesting ES5 side effect / window.hasOwnProperty(x) !== hasOwnProperty(x)
Mark S. Miller
erights at google.com
Mon Feb 7 11:23:26 PST 2011
In Annex E, "Additions and Changes in the 5th Edition that Introduce
Incompatibilities with the 3rd Edition", we list 27 potential compat
problems, including the one you encountered:
In particular, in Edition 5 built-in functions that are specified to
actually use the passed this value as an object typically throw a TypeError
exception if passed null or undefined as the this value.
If you're looking for other daemons, I'd start there. If you find daemons
that we missed, please let us know, as further errata may be called for. So
far, AFAIK Annex E has done quite well.
On Mon, Feb 7, 2011 at 10:54 AM, Wes Garland <wes at page.ca> wrote:
> I bumped into something this morning that I thought might be worth pointing
> out -- mostly because I was surprised to have seemingly-valid ES3 code break
> on an ES5 browser without strict mode in play.
> One of my developers has a habit of writing tests like
> if (!hasOwnProperty("console"))
> // supply my own console object instead
> This works fine on our deployment-target browsers, and up until very
> recently, on Firefox 4 betas. With the latest Firefox Minefield build,
> this same code throws a surprising (to me) error: "Error: can't convert
> undefined to object".
> If I understand the relevant Mozilla bug correctly (and I'm not sure that I
> do) -- https://bugzilla.mozilla.org/show_bug.cgi?id=619283 -- this is
> because of the way bindings are looked up in ES5 10.2.1.2.4.
> Comments? Obviously, the work-around is easy -- always invoke
> window.hasOwnProperty instead of hasOwnProperty -- but I wonder what other
> daemons lurk in the same corners.
> Wesley W. Garland
> Director, Product Development
> PageMail, Inc.
> +1 613 542 2787 <+16135422787> x 102
> es-discuss mailing list
> es-discuss at mozilla.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss