今「サイ本」を読んでいて配列の 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 の商品をブログに載せる練習をしてみます。えいやっ!