JavaScriptで!!(エクスクラメーションマーク2つ)
ブラウザ内でカメラを使うデモの中で、「!!」というのを目にしました。
「!」一つはよく使いますが、二つは使ったことがありません。
ググってみたところ、Stack OverflowでWhat is the !! (not not) operator in JavaScript?という記事を発見。
回答がいろいろありますが、一番上のをみると、
Converts it to boolean!!oObject //Inverted boolean(真偽値を反転する) !!oObject //Non inverted boolean so true boolean representation(真偽値を反転しない、つまりtrueが返る)
ブーリアン(真偽値)に変換する、とあります。
……って、言われてみるとそうですよねぇ。
return !!( navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia );
先の例だと、!!がない場合、returnされるのは()内で該当する(この場合存在する)オブジェクトです。
該当するものが何もない場合はundefinedが返ります。
consoleで試してみると、
Boolean(undefined) // false !undefined // true !!undefined // false
undefinedをブール値にすると、falseなんですねぇ。
だからこの場合は、真偽値を反転せずに返すよう「!!」を使っていると。
タグ:JavaScript