文字列中に指定した文字列が含まれているかどうかを調べるのに"indexOf"を使う。 この indexOf の評価方法で、「指定した文字列が含まれない」ことを調べるのに "<0"を用いた方法ではなく、チルダ(~)を使った方法があるらしい。
"<0" を使った記述
1 2 3 4 5 6 7 | var text = 'As flies to wanton boys are we to the gods, they kill us for their sport.' ; if (text.indexOf( 'gods' ) < 0) { // 'gods' が含まれない場合 } else { // 'gods' が含まれる場合 } |
1 2 3 4 5 6 7 | var text = 'As flies to wanton boys are we to the gods, they kill us for their sport.' ; if (!~text.indexOf( 'gods' )) { // 'gods' が含まれない場合 } else { // 'gods' が含まれる場合 } |
ビット演算子。符号を逆転して1を引く。
[例] ~(-1) => (-(-1) - 1) => (0)どちらが速いか?
指定した文字が含まれる場合(1)、指定した文字が含まれない場合(2)について、500000回ループにかかる時間を計測。5回計測した平均は次のようになりました。
[msec]
ケース | IE8 | IE9 | Chrome23 | Firefox17 | ||||
---|---|---|---|---|---|---|---|---|
!~ | <0 | !~ | <0 | !~ | <0 | !~ | <0 | |
(1)文字列を含む | 214.6 | 207.2 | 204.8 | 210.4 | 111.4 | 112.2 | 77.2 | 75.4 |
(2)文字列を含まない | 211.0 | 206.8 | 204.0 | 206.4 | 129.6 | 126.4 | 102.2 | 95.6 |
測定結果を見る限り、一概にどちらが良いとは言いにくそう。。 ということで、可読性の観点から個人的には "<0" を用いたほうが良いかと…
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!