Interesting ES5 side effect / window.hasOwnProperty(x) !== hasOwnProperty(x)

Wes Garland wes at page.ca
Mon Feb 7 10:54:17 PST 2011


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.

Interesting.

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.

Wes

-- 
Wesley W. Garland
Director, Product Development
PageMail, Inc.
+1 613 542 2787 x 102
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110207/4c8d8382/attachment.html>


More information about the es-discuss mailing list