Как можно сравнить сроку с не строкой, не приведя её к строке (конечно, если этого не сделает интерпретатор), для значений типа undefined, true и т.п. интерпретатор этого не делает, а typeof возвращает строку.
var a;
alert(typeof(typeof a))
alert (typeof undefined)