ブラウザ内でカメラを使うデモの中で、「!!」というのを目にしました。
「!」一つはよく使いますが、二つは使ったことがありません。
ググってみたところ、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