Personally I think typeof is somewhat broken. A better tool to use is the .toString() function on the Object prototype: ({}).toString.call(yourValue) gives you a slightly cumbersome but less weird result than typeof.
Well everything that's not a scalar type - numbers, booleans, and strings - that's not null or undefined is an object (actually the values involved are references to the objects - objects are never directly "values").
Functionconstructor. They're objects with special runtime-supported characteristics (like, being functions).typeofconsidersnullto be of typeObject, andundefinedreally isn't a type at all.typeofcorrespond to a superset of the types in the language?typeofis somewhat broken. A better tool to use is the.toString()function on theObjectprototype:({}).toString.call(yourValue)gives you a slightly cumbersome but less weird result thantypeof.nullorundefinedis an object (actually the values involved are references to the objects - objects are never directly "values").