文字列リテラルとStringオブジェクト

は違うらしい。これは知らなかった。
MDN文字列リテラルは String オブジェクトとは別物
Creative Commons: Attribution-Sharealike license v2.5

s1 = "foo" // 文字列リテラルの値を作成
s2 = new String("foo") // String オブジェクトを作成

文字列リテラルにinstanceof Stringしてもfalseが返ってくる由。
new String()と文字列リテラルについてのメモ
strが文字列リテラルであるかどうかを調べるには、

typeof str == "string";

とする。

こういうことは事前に知識がないとどつぼに嵌りそうなので座学ってやっぱり重要だなと。