タイトルと 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 も速いみたいということで使っていましたが、最近は書かなくなりました。