オブジェクトとプリミティブ・追記

いいネタがあったので追記

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が返りますので…