いいネタがあったので追記
JavaScript奇妙なふるまいまとめサイト | エンタープライズ | マイコミジャーナル
Stringのオブジェクトとプリミティブの違いを理解していれば、
"string" instanceof String
これがfalseとなる理由は自明です。オブジェクトではないのですから、Stringのinstanceのわけがありません。
ところで parseInt("06") が 6 になるのに、parseInt("08") が 0 になる理由は分かりますか? JavaScriptでは0で始まる数値リテラルは8進数表現です。
010 + 01
これは9になります。8進数の10は10進数では8です。
"08"は8進数表現としてparseされますが、8進数に"8"という文字で表される値はないので"08"という文字列はparseできません。よって 0 となります。
追記
いや違う。"08"の8が無視されて0だけ数値変換されて0になる、です。parseできない場合はNaNが返りますので…