indexOf でマッチしないときの綺麗?な分岐方法
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ -1 ってビット反転すれば 0 になる
◆ 0 以上の数値はビット反転すると 0 以外になる
◆ 0 以上の数値はビット反転すると 0 以外になる
最近では存在するかの確認は includes ですが あえての indexOf です
このメソッドは見つかった添字を返します
見つからなかったら -1 です
false ではないです
ですが -1 ってビット反転すると 0 になるという特徴があるのです
そして -1 以外にビット反転して 0 にはなるものはないです
-1 >>> 0 の 4294967295 番目にマッチした場合は 32 ビットの範囲でビット反転すれば 0 ですが文字列も配列も 4294967295 番目まで作ることができません
ということは
ぱっと見ると分かりづらい気もしますが "1" か "0" の文字列を数値化した上で 1 なら true で 0 なら false として 反転させた true/false がほしいときには
JavaScript は記号だけでどうにかできる言語ですし
たまたま見ていたコードで見かけて初めて知ったのですが 私が知らなかっただけで実は有名な方法なのかもしれません
このメソッドは見つかった添字を返します
見つからなかったら -1 です
false ではないです
arr.indexOf(1) < 0
とかarr.indexOf(1) === -1
と条件を書く事になると思いますですが -1 ってビット反転すると 0 になるという特徴があるのです
そして -1 以外にビット反転して 0 にはなるものはないです
-1 >>> 0 の 4294967295 番目にマッチした場合は 32 ビットの範囲でビット反転すれば 0 ですが文字列も配列も 4294967295 番目まで作ることができません
ということは
!~arr.indexOf(1)
とかけば マッチしなかった場合に true マッチした場合に false が取得できますぱっと見ると分かりづらい気もしますが "1" か "0" の文字列を数値化した上で 1 なら true で 0 なら false として 反転させた true/false がほしいときには
!+strnum
とか(私は)普通に書きますし あまり気にならないと思いますJavaScript は記号だけでどうにかできる言語ですし
たまたま見ていたコードで見かけて初めて知ったのですが 私が知らなかっただけで実は有名な方法なのかもしれません