Get string "-" with JavaScript using only the symbols from "+[]" Challenge: Get the JavaScript string value containing only the &quot;-&quot; character using code only containing the following three symbols: +[]. Note: I'm not sure if this is possible.
Scoring criterion: The number of bytes of code used.
Why? I've set myself a challenge to be able to write code using only the above three characters that can evaluate to ANY JavaScript number. The only thing left I am missing is having access to the &quot;-&quot; character. Once I have this, everything else becomes possible. This question is what gave me inspiration for this.
Definitions
Here is a list of definitions I've so far come up with to write a JavaScript expression (on the left) using only the +[] symbols (on the right). Most definitions reuse existing definitions.


0: +[]
1: ++[[]][0]
(EXPR): [EXPR][0]
1: (1)
2: 1+1
3: 1+2
4: 1+3
5: 1+4
6: 1+5
7: 1+6
8: 1+7
9: 1+8
POSITIVE_INTEGER: +((DIGIT1+&quot;&quot;)+DIGIT2+DIGIT3+...)
&quot;&quot;: []+[]
EXPR+&quot;&quot;: EXPR+[]
undefined: [][0]
&quot;undefined&quot;: undefined+&quot;&quot;
&quot;undefined&quot;: (&quot;undefined&quot;)
&quot;u&quot;: &quot;undefined&quot;[0]
&quot;n&quot;: &quot;undefined&quot;[1]
&quot;d&quot;: &quot;undefined&quot;[2]
&quot;e&quot;: &quot;undefined&quot;[3]
&quot;f&quot;: &quot;undefined&quot;[4]
&quot;i&quot;: &quot;undefined&quot;[5]
NaN: +undefined
&quot;NaN&quot;: NaN+&quot;&quot;
&quot;N&quot;: &quot;NaN&quot;[0]
&quot;a&quot;: &quot;NaN&quot;[1]
Infinity: +(1+&quot;e&quot;+3+1+0)
&quot;Infinity&quot;: Infinity+&quot;&quot;
&quot;I&quot;: &quot;Infinity&quot;[0]
&quot;t&quot;: &quot;Infinity&quot;[6]
&quot;y&quot;: &quot;Infinity&quot;[7]
&quot;function find() { [native code] }&quot;: ([][&quot;f&quot;+&quot;i&quot;+&quot;n&quot;+&quot;d&quot;]+&quot;&quot;)
&quot;c&quot;: &quot;function find() { [native code] }&quot;[3]
&quot;(&quot;: &quot;function find() { [native code] }&quot;[13]
&quot;)&quot;: &quot;function find() { [native code] }&quot;[14]
&quot;{&quot;: &quot;function find() { [native code] }&quot;[16]
&quot;[&quot;: &quot;function find() { [native code] }&quot;[18]
&quot;a&quot;: &quot;function find() { [native code] }&quot;[19]
&quot;v&quot;: &quot;function find() { [native code] }&quot;[22]
&quot;o&quot;: &quot;function find() { [native code] }&quot;[17]


Unfinished definitions
These definitions contain missing pieces, highlighted in red (never mind, I can't figure out how to change the color, I'll use italics for now).


Number: 0[&quot;constructor&quot;]
OBJ.FUNC(): +{valueOf:OBJ.FUNC}
OBJ.FUNC(): {toString:OBJ.FUNC}+&quot;&quot;
&quot;-&quot;: (Number.MIN_SAFE_INTEGER+&quot;&quot;)[0]
&quot;-&quot;: (Number.NEGATIVE_INFINITY+&quot;&quot;)[0]
&quot;-&quot;: (Number.MIN_VALUE+&quot;&quot;)[2]
&quot;-&quot;: (&quot;&quot;.indexOf()+&quot;&quot;)[0]
&quot;.&quot;: (+&quot;1e-1&quot;)[1]



Thanks to the amazing answers to this question, I've created a JSFiddle that can generate any JavaScript number using those 3 characters. Input a number, tap &quot;Go!&quot;, and then copy and paste the JavaScript into your devtools console to see it in action. You can also hover over the generated output in the explanation section for details on how it works.
260 ... 210  205 bytes
Saved 5 bytes thanks to @user202729

[+[[+[++[[]][+[]]+[++[[]][+[]]]+[[+[][[]]]+[][[]]][+[]][++[[]][+[]]+[+[]]]+[++[[]][+[]]]+[+[]]+[+[]]]+[]][+[]][++[[]][+[]]]+[+[]]+[+[]]+[+[]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]]+[]][+[]][++[++[[]][+[]]][+[]]]

Try it online!
How?
We first generate the string &quot;11e100&quot; and coerce it to an number to get 1.1e+101. By coercing it back to a string and extracting the 2nd character, we obtain a &quot;.&quot;
Using this &quot;.&quot;, we can now generate the string &quot;.0000001&quot;. When forced to a number, this gives 1e-7, which can be used to extract a &quot;-&quot;.
Below is a slightly more readable version:
[+[[+['11' + [[NaN] + undefined][0][10] + '100'] + []][0][1] + '0000001'] + []][0][2]

Commented
[                           // singleton array:
  +[                        //   coerce to a number:
    [                       //     singleton array:
      +[                    //       coerce to a number:
        ++[[]][+[]] +       //         1 +
        [++[[]][+[]]] +     //         &quot;1&quot; +
        [                   //         singleton array:
          [+[][[]]] +       //           &quot;NaN&quot; +
          [][[]]            //           undefined
        ][+[]]              //         [0] -&gt; &quot;NaNundefined&quot;
        [                   //         build [10]:
          ++[[]][+[]] +     //           1 +
          [+[]]             //           &quot;0&quot;
        ]                   //         -&gt; &quot;e&quot;
        + [++[[]][+[]]]     //         + &quot;1&quot;
        + [+[]] + [+[]]     //         + &quot;0&quot; + &quot;0&quot; -&gt; &quot;11e100&quot;
      ]                     //       -&gt; 1.1e101
      + []                  //       coerce to a string
    ][+[]]                  //     [0] -&gt; &quot;1.1e101&quot;
    [ ++[[]][+[]] ]         //     [1] -&gt; &quot;.&quot;
    + [+[]] + [+[]] + [+[]] //     + &quot;0&quot; + &quot;0&quot; + &quot;0&quot;
    + [+[]] + [+[]] + [+[]] //     + &quot;0&quot; + &quot;0&quot; + &quot;0&quot;
    + [++[[]][+[]]]         //     + &quot;1&quot; -&gt; &quot;.0000001&quot;
  ]                         //   -&gt; 1e-7
  + []                      //   coerce to a string
][+[]]                      // [0] -&gt; &quot;1e-7&quot;
[                           // build [2]:
  ++[                       //   pre-increment:
    ++[[]][+[]]             //     1
  ][+[]]                    //   [0]
]                           // -&gt; &quot;-&quot;