JavaScript自体のデフォルトの文字エンコードはありません。JavaScriptプログラムは、仕様に関する限り、一連の抽象文字です。ネットワークを介して送信する場合、または単にコンピュータに保存する場合、抽象文字は何らかの方法でエンコードする必要がありますが、そのメカニズムはECMAScript標準によって制御されていません。
ECMAScript標準のセクション6は、参照エンコーディングとしてUTF-16を使用していますが、デフォルトとして指定していません。参照としてUTF-16を使用することは論理的に不要ですが(Unicode番号を参照することで十分です)、おそらく人々を助けると想定されていました。
この問題は、文字列リテラルまたは文字列一般の解釈と混同しないでください。'Φ'のようなリテラルは、プログラムの残りの部分と一緒に、いくつかのエンコーディングである必要があります。これは任意のエンコーディングにすることができますが、エンコーディングが解決された後、リテラルは文字のUnicode番号に従って整数として解釈されます。
JavaScriptプログラムがインターネットを介して(「外部JavaScriptファイル」として)そのまま送信される場合、RFC 4329、スクリプトメディアタイプが適用されます。条項4は、メカニズムを定義します。主に、HTTPヘッダーなどのヘッダーがチェックされ、charset
そこにあるパラメーターが信頼されます。(実際には、Webサーバーは通常JavaScriptプログラムにそのようなパラメーターを指定しません。)次に、BOM検出が適用されます。これに失敗すると、UTF-8が暗示されます。
メカニズムの最初の部分はややあいまいです。これは、実際のHTTPヘッダーのパラメーターのみに関連していると解釈される場合もあれば、要素のパラメーターにcharset
拡張される場合もあります。charset
script
JavaScriptプログラムが要素または何らかのイベント属性を介してHTMLに埋め込まれているように見える場合、script
その文字エンコードはもちろんHTMLドキュメントの文字エンコードと同じです。セクションHTML4.01仕様の文字エンコードを指定するcharset
と、解決メカニズムが次の順序で定義されます。HTTPヘッダー、charset
でmeta
、charset
ドキュメントにアクセスするためにたどられたリンクで、最後にヒューリスティック(推測)。これには多くのことが関係する可能性があります。cf. HTML5ドラフトの複雑な解決メカニズムに。