Я большой не любитель js, но немного побуду адвокатом дьявола:
typeof null; //"object". WTF?
А почему бы нет? Собственно я именно что object тут и ожидал увидеть. А что тут может быть еще? Нулевая ссылка же. В жабе будет то же самое. Да и в шарпе.
typeof function(){}; //"function". Разве у нас есть тип function?
Я хз есть ли в js function (в смысле он там отделяется от объекта вообще или нет), но замечу, что вообще говоря, литералы в ЯП не обязаны иметь обычный тип, применимый к переменным. Скажем в Обероне строковый литерал ("Foo") имеет тип который не соответствует ни одному обычному обероновскому типу переменной. Кстати, а какой в Обероне тип имеет NIL? :-D
Так вот - в данном случае у нас функциональный литерал. И тип у него может быть вот такой вот. Необычный.
Вот правильно, что я плюнул на изучение этого гумна.
Оно гумно, но не в этом месте :-)