javascriptは暗黙的な型変換を行うことによってboolean(真偽値)でない値が格納されている変数をboolean同然に記述することを許しています。javascriptの論理演算子はこの仕組みを利用することで便利な拡張がなされています。javascriptの論理演算子&&、||についての記述の引用が次です。
The value produced by a &&
or ||
operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions.
引用:ECMAScript 2017 Language Specification 12.13 Binary Logical Operators
意訳すると、”&&や||によって返される値が真偽値である必要はありません。返り値は常に2つの被演算子のうちの片方の値になります。”、となります。
具体的に&&や||はMDNの論理演算子のページにある次の表の通りに動作します。
演算子 | 使用法 | 説明 |
---|---|---|
論理 AND(&& ) |
expr1 && expr2 |
expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象の両方が true ならば、&& は、true を返し、そうでなければ、false を返します。 |
論理 OR (|| ) |
expr1 || expr2 |
expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象のどちらかが true ならば、|| は、true を返し、両方とも false の場合は、false を返します。 |
論理 NOT (! ) |
!expr |
単一の演算対象が true と見ることができる場合は、false を返します。そうでない場合は、true を返します。 |
引用:論理演算子 – JavaScript | MDN
論理値の真偽が確定した時点の被演算子が返されるわけですね。この論理演算子を用いて真偽値以外の値を得ようとする際に注意するべきなのが論理 NOT (!
)です。この論理演算子は被演算子を真偽値として見たときの値(true or false)を返すため、論理式に!
が含まれていた場合、被演算子のいずれかが返ってくる保障が薄くなります。
論理演算子を真偽値以外の目的で使用している例:
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.2.min.js"><\/script>')</script>
このコードは、window.jQueryが実行可能ならばwindow.jQueryを、window.jQueryが実行できないならばdocument.write(‘<script src=”js/libs/jquery-1.7.2.min.js”><\/script>’)を実行する、というコードになります。