JavaScript Type Gotchas

With instanceof

by Ryan Morris

JavaScript

// Numbers
console.group("Numbers");
console.log('typeof 37 is number: ', typeof 37 === 'number');
console.log('typeof 3.1415 is number: ', typeof 3.1415 === 'number');
console.log('typeof Math.LN2 is number: ', typeof Math.LN2 === 'number');
console.log('typeof Infinity is number: ', typeof Infinity === 'number');
console.log('typeof NaN is number: ', typeof NaN === 'number'); // even though it's "not a number"
console.log('typeof Number("1") is number: ', typeof Number("1") === 'number'); // useful for typecasting
console.groupEnd();

// Strings
console.group("Strings");
console.log('typeof "" is string: ', typeof "" === 'string'); // empty string is still string
console.log('typeof (typeof 1) is string: ', typeof (typeof 1) === 'string'); // typeof always return a string
console.log('typeof String(Math.PI) is string: ', typeof String(Math.PI) === 'string'); // useful for typecasting

var myString = new String('123');

console.log('myString: ', myString);
console.log('typeof myString is object: ', typeof myString === 'object');
console.log('myString instanceof String: ', myString instanceof String);
console.groupEnd();

// Booleans
console.group("Numbers");
console.log('typeof true is boolean: ', typeof true === 'boolean');
console.log('typeof Boolean(0) is boolean: ', typeof Boolean(0) === 'boolean'); // useful for typecasting
console.groupEnd();

// Arrays
console.group("Arrays");
var myArray = [1,2,3];

console.log('myArray: ', myArray);
console.log('typeof myArray is object: ', typeof myArray === 'object'); // use instanceof Array or Array.isArray()
console.log('myArray instanceof Array: ', myArray instanceof Array);
console.log('Array.isArray(myArray): ', Array.isArray(myArray));
console.groupEnd();

// Dates
console.group("Dates");
var myDate = new Date();

console.log('myDate: ', myDate);
console.log('typeof myDate is object: ', typeof myDate === 'object');
console.log('myDate instanceof Date: ', myDate instanceof Date);
console.groupEnd();

//...