論理演算子 (JavaScript)

論理演算子は、論理 (ブール) 演算を実行します。
演算子 説明
expr1 && expr2 (論理 AND) expr1expr2 が両方とも true の場合に true を返します。
expr1 || expr2 (論理 OR) expr1 または expr2 のいずれかが true か、両方とも true の場合に、true を返します。
! expr1 (論理 NOT) expr1 が false の場合に true を返し、それ以外の場合は false を返します。

false に変換できる式としては、例えば、NULL、0、空ストリング (??????)、undefined に評価する式があります。 && と || 演算子は、ブール値以外のオペランドに対して使用できますが、その戻り値は常にブール値に変換できるため、これらの演算子はブール演算子とみなすことができます。

使用法

ベストプラクティスは、ブールオペランドに対して論理演算子を使用することです。しかし、どの型のオペランドでも組み合わせることができます。厳密な規則は以下のとおりです。
以下の値は、ブール値として処理される場合は false です。その他の有効な数値とストリング値は true として処理されます。
  • 0 または 0.0
  • 空ストリング
  • NULL
  • undefined

この例では、論理演算子を実行します。 ここでは、ブールオペランドと非ブールオペランドの処理方法を示します。
function p(stuff) {
	print("<<<" + stuff + ">>>");
}

var a = true;
var b = false;
var n0 = 0;
var n1 = 1;
var nm1 = -1;
var x0 = 0.0;
var x1 = 1.1;
var s0 = "";
var s1 = "foo";
var sn = null;

// How different types are treated as boolean
if(a) p("a is true"); else p("a is false"); // true
if(b) p("b is true"); else p("b is false"); // false
if(n0) p("n0 is true"); else p("n0 is false"); // false
if(n1) p("n1 is true"); else p("n1 is false"); // true
if(nm1) p("nm1 is true"); else p("nm1 is false"); // true
if(x0) p("x0 is true"); else p("x0 is false"); // false
if(x1) p("x1 is true"); else p("x1 is false"); // true
if(s0) p("s0 is true"); else p("s0 is false"); // false
if(s1) p("s1 is true"); else p("s1 is false"); // true
if(sn) p("sn is true"); else p("sn is false"); // false

// Using logical values as operands
p("a && a = " + (a && a)); // true
p("a && b = " + (a && b)); // false
p("b && b = " + (b && b)); // false
p("b && a = " + (b && a)); // false
p("a || a = " + (a || a)); // true
p("a || b = " + (a || b)); // true
p("b || b = " + (b || b)); // false
p("b || a = " + (b || a)); // true
p("!a = " + (!a)); // false
p("!b = " + (!b)); // true

// Using non-logical values as operands
p("n1 && n1 = " + (n1 && n1)); // true
p("n1 && n0 = " + (n1 && n0)); // false
p("n0 && n0 = " + (n0 && n0)); // false
p("n0 && n1 = " + (n0 && n1)); // false
p("n1 || n1 = " + (n1 || n1)); // true
p("n1 || n0 = " + (n1 || n0)); // true
p("n0 || n0 = " + (n0 || n0)); // false
p("n0 || n1 = " + (n0 || n1)); // true
p("!n1 = " + (!n1)); // false
p("!n0 = " + (!n0)); // true