今「サイ本」を読んでいて配列の toLocaleString() の説明で、

 toString()メソッドのローカライズ版の toLocaleString()メソッドを実行すると、配列の要素の toLocaleString()メソッドを呼び出して、個々の要素を文字列に変換し、個々の文字列をロケール固有の区切り文字で区切ったリストを出力します。なお区切り文字がどの文字になるかは実装依存です。

David Flanagan 著『JavaScript 第 5 版』(オライリー・ジャパン発行)P121

とあり、ロケール文字ってなんだろうと思ったのがことの始まりです。実験のために書いたのが下のコードです。

var a = [1, "hello", 3.4e3, "world", Number.POSITIVE_INFINITY, "!"];
document.write(a.toLocaleString() +"<br />");
document.write(a.join() +"<br />");

このコードを試したブラウザは IE, Firefox, Google Chrome, Opera の4つです。Firefox, Google Chrome, Opera はほとんど同じ結果になりましたが、IE はちょっと違いました。

Google Chrome, Opera

1,hello,3400,world,Infinity,!
1,hello,3400,world,Infinity,!

Firefox

1,hello,3,400,world,Infinity,!
1,hello,3400,world,Infinity,!

Internet Explorer

1.00, hello, 3,400.00, world, 無限大, !
1,hello,3400,world,Infinity,!

「無限大」って、予想だにしなかった漢字での返答にちょっと笑ってしまいました。ちなみに JavaScript は、 Unicode 文字コードを使用して記述する言語だからブラウザの「表示」⇒「エンコード」を韓国語にしたら韓国語になるのかなと思ってやってみましたが、変わらず「無限大」のままでした。フォントが入ってないからかな?その辺のことはよくわかりません。しかし、配列の要素をつなぐ文字列が ', ' とカンマの後にスペースがあるところなんかは好きですね。 join(", ") とすればいい話ですけど。もしかしたら、この他にも「無限大」以外の面白い変換があるかもしれません。

ところで、「サイ本」の引用ですが、『個々の要素を文字列に変換し』た段階ですでにブラウザ間の違いが出ているようなので、実装に依存するのは『区切り文字がどの文字になるか』に加えて「個々の要素を文字列に変換する規則」も付け加えておいた方がいいかもしれません。こういったブラウザ間の違いを見るのも楽しいものです。

最後に

JavaScript 第5版 いわゆる「サイ本」を例に出したこの機に Amazon の商品をブログに載せる練習をしてみます。えいやっ!