質問: !!( 'ontouchstart' in window || (navigator.pointerEnabled && navigator.maxTouchPoints > 0) ); ``` やっていることは理解しているのですが、頭の方のある !!←この部分の必要性が分かりません。 NOT の NOT で結局戻ってきているのでは? と思っているのですが、 もしかして私の勉強不足で違う意味があるのかと考えております。 どうか、お力添えの方よろしくお願いいたします。 --- もう1つ、click, touch イベントの実装について皆様にお聞きしたいのですが、 touch も click も今はそこまで遅延がないから、極論click だけでもいいのでは?と言われましたが 実際のところどうなのでしょうか? よろしければ、こちらの方の質問もよろしくお願いいたします。
回答: `'ontouchstart' in window`が`false`かつ`navigator.pointerEnabled`が`undefined`のとき、外側の括弧のなかの値は`undefined`になります。というのも、javascriptの`||`や`&&`はbooleanを返すわけではないからです。そこで、論理否定演算子を2回重ねてbooleanにキャストしています。 必要ないと言えば必要ない(`undefined`は`false`扱いのため)のですが`undefined`であると不都合も確かにあるため、こういう書き方をすることも多いです。 touchとclickの扱いですが、マルチタッチを考慮しないならclickの方が手軽です。また、ドラッグやスワイプの検出を行いたいときも`mousedown`、`mouseup`と`touchstart`、`touchend`を区別する必要があります。ただ、両方を纏めた`pointerdown`、`pointerup`というイベントも存在するので、使えるならこっちの方が手軽ではありますね。Safariが未対応というのは痛すぎるので、考えた方がいいとは思いますが。