May 31, 2007
JavaScriptで出現回数のカウントをする際のコード
今までこう書いてたのが
こう書けることが判明した。
コメント欄への回答
前者の書き方とこの書き方は実は問題があって、Object.prototypeに定義されてるメソッドとハッシュのキー名がかぶるとおかしくなる。なので本当はcount.hasOwnProperty(key)でチェックするのが正しいのだけれど、出現回数のカウントごときでメソッド呼び出しとかしたくない。
その点、後者の書き方だと++count["toString"]が上手いことNaNになってくれるので、気にしなくて良い。ハッシュのキーにprefixつけてる前提ならどちらにしろ気にしないでいいけど。
count[key] = count[key] ? count[key] + 1 : 1;
こう書けることが判明した。
count[key] = ++count[key] || 1;
コメント欄への回答
count[key]がNumberまたはundefinedであるとして、個人的には
count[key] = (count[key] || 0) + 1;
のほうが好みです。
JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。
前者の書き方とこの書き方は実は問題があって、Object.prototypeに定義されてるメソッドとハッシュのキー名がかぶるとおかしくなる。なので本当はcount.hasOwnProperty(key)でチェックするのが正しいのだけれど、出現回数のカウントごときでメソッド呼び出しとかしたくない。
その点、後者の書き方だと++count["toString"]が上手いことNaNになってくれるので、気にしなくて良い。ハッシュのキーにprefixつけてる前提ならどちらにしろ気にしないでいいけど。
WriteBacks
count[key] = count[key]++ || 1;
ではなく?
# 試してません。
Posted by at 2007/05/30 (Wed) 15:27:25
>count[key] = count[key]++ || 1;
横槍ですが。それだと ++ する前の値が返るので、要するにcount[key]==trueの時には
count[key] = count[key];
になってしまう罠。
Posted by undefined at 2007/05/30 (Wed) 22:38:43
count[key]がNumberまたはundefinedであるとして、個人的には
count[key] = (count[key] || 0) + 1;
のほうが好みです。
JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。
Posted by nanto_vi at 2007/05/31 (Thu) 01:15:30
http://la.ma.la/blog/diary_200705301141.trackback
writeback message: Ready to post a comment.

