Попробую показать вам на примере, думаю так будет понятнее:
alert(false instanceof Boolean);
alert((new Boolean('false')) instanceof Boolean);
аналогично
alert('' instanceof String);
alert((new String('')) instanceof String);
Суть в том, что объект Boolean и остальные типы данных не являются теми объектами которые создаются из этих литералов, используйте typeof, если необходимо сравнить тип, а не принадлежность к объекту.
Но это не работает только с примитивами.
alert([] instanceof Array);
alert([] instanceof Object);