ブール演算子

概要

ブール演算子は、式をブール値に変換するために使用されます。演算子は合計 4 つあります。

  • 否定演算子: !
  • そして演算子: &&
  • OR 演算子: ||
  • 三項演算子: ?:

否定演算子 (!)

否定演算子は感嘆符であり、ブール値をその反対の値に変更するために使用されます。つまり、「true」は「false」になり、「false」は「true」になります。

!true // false
!false // true

非ブール値の場合、否定演算子はそれらをブール値に変換します。次の 6 つの値は 'true' に否定され、その他の値はすべて 'false' として記憶されます。

  • 「未定義」
  • 「ヌル」
  • 「偽」
  • 0
  • 'NaN'
  • 空の文字列 ('')
!unknown // true
!null // true
!0 // 真
!NaN // true"" // 真実

!54 // 偽
!'こんにちは' // false
![] // 間違い
!{} // 間違い

上記のコードでは、値の型に関係なく、反転演算の後はブール値になります。

値に対して 2 つの連続した反転演算を実行する場合、それは対応するブール値に変換することと同等であり、Boolean 関数と同じ効果があります。これは一般的に使用される型変換方法です。

!!x
// と同等
ブール値(x)

上記のコードでは、値 x がどのようなタイプであっても、2 回の反転演算の後、それは Boolean 関数の結果と同じブール値になります。したがって、2 回否定することは、値をブール値に変換する簡単な方法です。

アンド演算子 (&&)

また、演算子 (&&) は複数の式を評価するためによく使用されます。

その操作規則は次のとおりです。最初の演算子のブール値が「true」の場合、2 番目の演算子の値が返されます (最初の演算子のブール値が 'true' の場合、これは値であり、ブール値ではないことに注意してください)。 false の場合、最初の演算子の値が直接返され、2 番目の演算子は評価されなくなります。

't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""

var x = 1;
(1 - 1) && (x += 1) // 0
× // 1

上記のコードの最後の例では、AND 演算子の最初の演算子のブール値が false であるため、2 番目の演算子を評価せずにその値 0 が直接返されるため、変数 x の値は次のようになります。変わっていない。

2 番目の演算子をスキップするこのメカニズムは「ショートサーキット」と呼ばれます。プログラマの中には、これを使用して「if」構造を置き換えることを好む人もいます。たとえば、次のコードは「if」構造を持ち、AND 演算子を使用して書き換えることができます。

if (i) {
  doSomething();
}

// と同等

私 && doSomething();

上記の 2 つのコードの記述方法は同等ですが、後者の方法は目的がわかりにくく、デバッグが容易ではないため、注意して使用することをお勧めします。

また、演算子は複数の演算子と組み合わせて使用​​できます。この場合、ブール値が「false」である最初の式の値が返されます。すべての式が「true」と評価された場合、最後の式の値が返されます。

true && 'foo' && '' && 4 && 'foo' && true
// ''

1 && 2 && 3
// 3

上記のコードの例 1 では、ブール値 false を持つ最初の式が 3 番目の式であるため、空の文字列が取得されます。例 2 では、すべての式のブール値が true であるため、最後の式の値 3 が返されます。

または演算子 (||)

OR 演算子 (||) は、複数の式を評価するためにも使用されます。その操作規則は次のとおりです。最初の演算子のブール値が「true」の場合、最初の演算子の値が返され、最初の演算子のブール値が「false」の場合、2 番目の演算子は評価されません。 ` の場合、2 番目の演算子の値が返されます。

't' || '' // "t"
't' || 'f' // "t"
'' || 'f' // "f"
'' || '' // ""

短絡規則もこの演算子に適用されます。

var x = 1;
true || (x = 2) // true
× // 1

上記のコードでは、OR 演算子の最初の演算子が「true」であるため、2 番目の演算子を実行せずに直接「true」を返します。したがって、「x」の値は変更されていません。最初の式の値のみによって 2 番目の式を実行するかどうかを制御するこのメカニズムは、「ショートカット」と呼ばれます。

OR 演算子は複数回使用でき、その場合、ブール値が「true」である最初の式の値が返されます。すべての式が false の場合、最後の式の値が返されます。

0 || 'foo' ||
// 40 || ''
// ''

上記のコードの例 1 では、ブール値「true」を持つ最初の式が 4 番目の式であるため、値 4 が取得されます。 2 番目の例では、すべての式のブール値が「false」であるため、最後の式の値が返されます。

OR 演算子は、変数のデフォルト値を設定するためによく使用されます。

関数 saveText(テキスト) {
  テキスト = テキスト || '';
  // ...
}

// または次のように記述されます
saveText(this.text || '')

上記のコードは、関数の呼び出し時にパラメーターが指定されていない場合、パラメーターはデフォルトで空の文字列に設定されることを示しています。

三項条件演算子 (?:)

3 項条件演算子は、3 つの式を区切る疑問符 (?) とコロン (:) で構成されます。これは、JavaScript 言語で 3 つの演算子を必要とする唯一の演算子です。最初の式のブール値が「true」の場合は 2 番目の式の値が返され、それ以外の場合は 3 番目の式の値が返されます。

't' ? 'こんにちは' : '世界' // "こんにちは"
0 ? 'こんにちは' : '世界' // "世界"

上記コードの「t」と「0」のブール値はそれぞれ「true」と「false」なので、2番目と3番目の式の値がそれぞれ返されます。

一般に、3 項の条件式は、if...else ステートメントと同じ表現効果を持ちます。前者が表現できれば、後者も表現できます。ただし、この 2 つには大きな違いがあります。「if...else」はステートメントであり、戻り値はありません。一方、三項条件式は式であり、戻り値があります。したがって、戻り値が必要な場合は、「if..else」ではなく、3 項の条件式のみを使用できます。

console.log(true ? 'T' : 'F');

上記のコードでは、console.log メソッドのパラメータは式である必要があります。この場合、3 項の条件式のみを使用できます。 「if...else」ステートメントを使用したい場合は、コード全体を変更する必要があります。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0