トップ «前の日記(2009-09-26) 最新 次の日記(2009-10-04)» 編集

Ussy Diary


2009-09-30

[JavaScript]format 関数

タイトルと URL をコピーする Ubiquity コマンド - Ussy Diary(2009-06-22)

以前は関数を利用するだけで、とくに気にもしていなかったのですが、 JavaScript でメッセージ出力するものを見直してみたところ、多少ずるしてすっきり書けました。

var regexp = /\{(\d)\}/g;
function format() {
  var args = Array.prototype.slice.apply(arguments);
  var s = args.shift();
  return s && s.replace(regexp, function() {
    var index = arguments[1];
    return args[index] || function() { throw new Error("arguments[" + index + "] is undefined.")} ();
  });
};

console.log(format("Hello {0}!", "JavaScript"));
console.log(format("Hello {0}!{1}", "JavaScript"));

実行結果

Hello JavaScript!
Error: arguments[1] is undefined.

以前より理解が進んでいるのかなと少し安心しました。 JavaScript のバージョンが 1.6 以上なら arguments の変換も Array.slice(arguments); でいけるのですが、 IE がまだまだ 1.5 なので駄目でした。

それから Array#join も速いみたいということで使っていましたが、最近は書かなくなりました。

理由がない限り、Array.join("") による文字列連結は使わないほうがいいみたい - latest log