Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #33458

Re: x === x

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.javascript
Subject Re: x === x
Date 2017-05-31 21:52 +0100
Organization A noiseless patient Spider
Message-ID <87efv4zr3k.fsf@bsb.me.uk> (permalink)
References (1 earlier) <874lw231ui.fsf@bsb.me.uk> <context-20170530144535@ram.dialup.fu-berlin.de> <2872662.aeNJFYEL58@PointedEars.de> <87inkh28sf.fsf@bsb.me.uk> <19437984.EfDdHjke4D@PointedEars.de>

Show all headers | View raw


Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:

> Ben Bacarisse wrote:
>
>> Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:
>>> Stefan Ram wrote:
>>>> Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
>>>>> What's wrong with {} === {}?
>>>>   It depends on the context.
>>> No, it does not.  “===” *makes* the (expression) context.
>> 
>> $ nodejs -c -e '[] === [];' && echo "ok"
>> ok
>> $ nodejs -c -e '{} === {};' && echo "ok"
>> [eval]:1
>> {} === {};
>>    ^^^
>> 
>> SyntaxError: Unexpected token ===
>> <snip trace-back>
>> $ nodejs -c -e '({} === {});' && echo "ok"                        ✘
>> ok
>
> Fascinating.  I had tried in the Chrome DevTools Console, and there the 
> trailing semicolon makes the difference:
>
> | > {} === {}
> | <- false
> | {} === {};
> | (x) Uncaught SyntaxError: Unexpected token ===
>
> I assume that the explicit semicolon there is considered an /EmptyStatement/ 
> that switches back to statement context.

I can't find any reference to "statement context" or "expression
context" in the language standard.  I assume it's your own terminology,
but I don't see how it helps explain why [] === []; is OK but {} === {};
is a syntax error.  (I know why, I'm just wondering how talking about
=== making expression context and ; switching back helps to explain this
difference.)

Just

  {} === {}

both on it's own and with a semicolon, is a syntax error because it is
not a /Script/ (or a /Module/).  It's not a /Script/ because none of the
options for a /Statement/ apply.  There is an explicit exemption that
prevents an /ExpressionStatement/ (the only reasonable candidate[1])
from staring with a {.  On the other hand

  [] === []

(again, with or without a semicolon) does parse as a /Script/ because it
*is* an /ExpressionStatement/.

The trouble with testing witch a REPL is that there is no standard that
mandates what the reader in such a loop should be expecting.

[1] Unfortunately, when explaining why something isn't valid syntax, you
should, formally, say why it is not any of the possible options.  I hope
it's clear that I'm just applying a short-cut by talking about "the only
reasonable candidate".  It's obviously not a /BlockStatement/ or a
/VariableStatement/ or a ... and so on but, were it not for the
exemption, it looks most like an /ExpressionStatement/.

-- 
Ben.

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-05-30 14:34 +0100
  Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-05-30 15:02 +0100
  Re: x === x Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-05-30 16:22 +0200
    Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-05-31 01:02 +0100
      Re: x === x Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-05-31 12:39 +0200
        Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-05-31 21:52 +0100
          Re: x === x Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-05-31 23:39 +0200
            Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-01 01:46 +0100
              Re: x === x Julio Di Egidio <julio@diegidio.name> - 2017-06-01 00:14 -0700
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-01 10:39 +0100
                Re: x === x Julio Di Egidio <julio@diegidio.name> - 2017-06-01 03:37 -0700
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-01 18:54 +0100
                Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-01 21:54 +0100
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-02 11:06 +0100
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-02 11:08 +0100
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-02 10:56 +0100
                Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-04 12:50 +0100
                Re: x === x John G Harris <niam@jghnorth.org.uk.invalid> - 2017-06-04 14:30 +0100
                Re: x === x Dr J R Stockton <J.R.Stockton@physics.org> - 2017-06-04 09:03 -0700
                Re: x === x Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-01 14:45 +0100
                Re: x === x Julio Di Egidio <julio@diegidio.name> - 2017-06-01 07:00 -0700
        Re: x === x Julio Di Egidio <julio@diegidio.name> - 2017-06-01 00:00 -0700

csiph-web