Fun With Wacky JavaScript Type Comparison

I recently had a conversation with Scoot Koon (LazyCoder) over Twitter about the wacky JavaScript type comparisons that are allowed. I was interested to see what weird oddities would come out if I compared the whole type system against it self. So I sat down and wrote a simple JavaScript routine to do just that, and the below reference table is the output of that routine.

null

undefined

true

false

-1

0

1

NaN

Infinity

""

" "

"null"

"undefined"

"true"

"false"

"-1"

"0"

"1"

"NaN"

"Infinity"

null

null

null

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

undefined

undefined

undefined

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

true

--

--

true

--

--

--

true

--

--

--

--

--

--

--

--

--

--

true

--

--

false

--

--

--

false

--

false

--

--

--

false

false

--

--

--

--

--

false

--

--

--

-1

--

--

--

--

-1

--

--

--

--

--

--

--

--

--

--

-1

--

--

--

--

0

--

--

--

0

--

0

--

--

--

0

0

--

--

--

--

--

0

--

--

--

1

--

--

1

--

--

--

1

--

--

--

--

--

--

--

--

--

--

1

--

--

NaN

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

Infinity

--

--

--

--

--

--

--

--

Infinity

--

--

--

--

--

--

--

--

--

--

Infinity

""

--

--

--

""

--

""

--

--

--

""

--

--

--

--

--

--

--

--

--

--

" "

--

--

--

" "

--

" "

--

--

--

--

" "

--

--

--

--

--

--

--

--

--

"null"

--

--

--

--

--

--

--

--

--

--

--

"null"

--

--

--

--

--

--

--

--

"undefined"

--

--

--

--

--

--

--

--

--

--

--

--

"undefined"

--

--

--

--

--

--

--

"true"

--

--

--

--

--

--

--

--

--

--

--

--

--

"true"

--

--

--

--

--

--

"false"

--

--

--

--

--

--

--

--

--

--

--

--

--

--

"false"

--

--

--

--

--

"-1"

--

--

--

--

"-1"

--

--

--

--

--

--

--

--

--

--

"-1"

--

--

--

--

"0"

--

--

--

"0"

--

"0"

--

--

--

--

--

--

--

--

--

--

"0"

--

--

--

"1"

--

--

"1"

--

--

--

"1"

--

--

--

--

--

--

--

--

--

--

"1"

--

--

"NaN"

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

"NaN"

--

"Infinity"

--

--

--

--

--

--

--

--

"Infinity"

--

--

--

--

--

--

--

--

--

--

"Infinity"

So some of the oddities that emerged to me are:

The word "Infinity" is equal to the type Infinity, however "true" or "false" don't equal true or false respectively.

" " == 0 == false and also "" == 0 == false, however " " != ""

Update Just noticed that NaN != NaN but Infinity == Infinity

If you would like to try this your self, or want to add to it, here is the code that I used.