Fixing the associativity / precedence of the instanceof operator

Till Schneidereit till at tillschneidereit.net
Mon Aug 25 03:56:48 PDT 2014


On Mon, Aug 25, 2014 at 12:40 PM, Charles Pick <charles at codemix.com> wrote:

> Hello, forgive me if this has come up before, I couldn't find any
> discussions via Google.
>
> One regular, annoying mistake I see people making is combining the `!`
> operator with `instanceof`:
>
>     if (!foo instanceof Foo) { ... }
>
>
> of course, this must be written with extra parentheses:
>
>     if (!(foo instanceof Foo)) { ... }
>
>
> My question is, why? There are no circumstances where the developer
> *intended* to write the first version, it's a typo and will always evaluate
> to false, even when using Boolean. Therefore would it be possible to fix
> the precedence so that the first version is parsed the same way as the
> second?
>

While I agree that the associativity should be different, changing this
won't work: there are probably tens of thousands of websites and node.js
scripts and what have you out there that would break, because the rely on
the current behavior. (Many of them probably because someone "fixed" the
associativity issue by inverting the contents of then and else blocks
instead of the condition.) Yes, those sites use somewhat broken code, but
users don't care as long as they work.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140825/03d381b5/attachment.html>


More information about the es-discuss mailing list