Fixing the associativity / precedence of the instanceof operator

Charles Pick charles at
Mon Aug 25 04:01:56 PDT 2014

I agree that this could cause some problems, however, that code has never
been correct in the first place. It's the equivalent of writing `if (false)
{...}`. Seems like it's reasonable to fix something if it only has an
impact on code which is already broken.

On Mon, Aug 25, 2014 at 11:56 AM, Till Schneidereit <
till at> wrote:

> On Mon, Aug 25, 2014 at 12:40 PM, Charles Pick <charles at>
> 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: <>

More information about the es-discuss mailing list