# 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`

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

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

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

## 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:

So now we can generate the first 10 counting numbers:

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