TIL the difference between
I was solving a puzzle that required that I check the type of the values of the properties of an object, to see if they were strings. I thought to myself, well I’ll just test the string-ness of the values using
typeof and be done, right? WRONG!
The puzzle designer was trying to be tricky, as the input object had both primitive strings and string Objects as values. Calling
typeof on a String object returns
object. This triggered a research session in to the differences between
instanceof. Find the discussion below.
instanceof vs typeof
Per the MDN docmentation,
typeof is a unary operator that returns a string indicating the type of the unevaluated operand.
In the case of string primitaves and string objects,
typeof returns the following:
Now let’s compare to the behavior of
instanceof is a binary operator, accepting an object and a constructor. It returns a boolean indicating whether or not the object has the given constructor in its prototype chain.
When applied to the string instances above, and compared to String, it behaves as follows:
How to properly test for strings?
In the case of the puzzle I was trying to solve, I had to detect both primitive strings and String objects as values of the object in question’s keys.
To account for both primitives and objects, I came up with the following function:
This example provided clarity on the differences between