javascriptで数値を扱うときはMathオブジェクトを使う事で複雑な計算が出来るようになる。
たとえば

var n = 5.5;
Math.round(n);
Math.floor(n);
Math.ceil(n);
Math.abs(n);

上の式をFirebugのコンソールで実行するとそれぞれ

6
5
6
5.5

と表示される。 上から順に

四捨五入
数値の切り上げ
数値の切り下げ
絶対値

を返す関数だがprototype.jsを使うとこれらを数値オブジェクトのメソッドとして使う事が出来る。
それぞれ

n.round();
n.floor();
n.ceil();
n.abs();

てな感じになる。
さらにtimesメソッドというのもある。使い方は

(5).times(function(){alert("Hello")});

あるいは

var n = 5;
n.times(function(){alert("Hello")});

リテラル値で無ければ()がいらないという事だ。
これを実行すると5回アラートがでて"Hello"という文字列を表示する。

ただ、

n.times(alert("Hello"));

と、こう書くと1回しかアラートが出てこない。
"TypeError: iterator is undefined"というエラーが出ている。
timesメソッドの引数はfunctionオブジェクトじゃなきゃ駄目だという事だろうか?

ちなみに

n.times(function(i){alert("Hello " + i + "回目")});

こう書くと"Hello 0回目"みたいな感じでインデックスを表示してくれる(変数名は任意)。
Rubyのブロック渡しみたいな感じだ。

PHP等でよく使う

$n = 5;
sprintf("%02d", $n);

みたいなのは

var n = 5;
n.toPaddedString(2);

で同じ結果("05")が得られる。日付等をフォーマットするのに便利そうだ。

同様に文字列オブジェクトも拡張されている。
ざっと

strip()
stripTags()
truncate()
escapeHTML()
unescapeHTML()

等々だ。

本来ならライブラリファイルは使わずにプログラミングしたいとこだが、非常に便利になる事とIEの挙動があまりにもおかしいので一回使うと手放せなくなる。

CSSでもIEとの差を埋めてくれるなんか便利なものが有るといいんだが。

カテゴリ:

トラックバック(0)

トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/8

コメントする