Pulling Ourselves Up By Our Bootstraps

Previous Top Next
But Why Would You Even Do This? Pulling Ourselves Up By Our Bootstraps Pulling Some Strings

Encoding The Basic Data Types

Using only the characters in our close-to-minimal alphabet, we can immediately represent two basic JavaScript objects:

  • [] The empty list, and
  • {} The empty object

By performing different combinations of type coercion on these simple values, we can derive the primitive Boolean values of true and false; from which we can then derive the integer values 0 and 1.

Primitive Values

By performing numeric coercion on an empty list, we obtain integer 0

Coerce Integer Zero

By performing Boolean coercion on an empty list, we obtain the Boolean primitive false

Coerce Boolean False

If we then perform Boolean negation on ![] we obtain true

Coerce Boolean True

Finally, we can derive integer 1 by performing numeric coercion on !![]

Coerce Integer One

Counting Numbers

We have seen above that when a Boolean value appears in an arithmetic expression, false is coerced to 0 and true is coerced to 1. Knowing this we can now derive the counting numbers.

Since 2 is 1 + 1, we can rewrite 1 + 1 as true + true and still get 2.

Further, we know from above that true can be encoded as !![]; therefore 1 + 1 can be rewritten as:

Coerce Integer Two

So now we can generate the first 10 counting numbers:

+[]                                                           // 0
+!![]                                                         // 1
!![] + !![]                                                   // 2
!![] + !![] + !![]                                            // 3
!![] + !![] + !![] + !![]                                     // 4
!![] + !![] + !![] + !![] + !![]                              // 5
!![] + !![] + !![] + !![] + !![] + !![]                       // 6
!![] + !![] + !![] + !![] + !![] + !![] + !![]                // 7
!![] + !![] + !![] + !![] + !![] + !![] + !![] + !![]         // 8
!![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![]  // 9