2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScript の論理演算子 (&&, ||) の応用

Posted at

#基本

  • JavaScript の処理は左から右へ進む!
  • AND / OR 演算子は2つの値を左から順に Boolean にキャストしてチェックし、どちらかの値を返す.
  • Boolean を返すわけではない.
x = {foo:4} && null; // = null
y = 1 || window; // = 1

##AND 演算
AND 演算 a1 && a2 の返り値は Boolean(a1)===false ? a1 : a2 と等価.
AND 演算は〔先に false と判定された値〕or〔最後の値〕を返す.
計算効率を上げるために、false 判定される可能性が高い方の値を先(左)に置く.

AND_演算子(&&)
//  1        2
   true && true  // = true   ← 2
   true && false // = false  ← 2
  false && true  // = false  ← 1
  false && false // = false  ← 1

##OR 演算
OR 演算 a1 || a2 の返り値は Boolean(a1)===true ? a1 : a2 と等価.
OR 演算は〔先に true と判定された値〕or〔最後の値〕を返す.
計算効率を上げるために、true 判定される可能性が高い方の値を先(左)に置く.

OR_演算子(||)
//  1        2
   true || true  // = true   ← 1
   true || false // = true   ← 1
  false || true  // = true   ← 2
  false || false // = false  ← 2

#応用: 論理演算をたくさん直列した場合
JavaScript の処理は左から右へ進むので、まず最も左の演算子が評価される。
その返り値に基づき次の演算子が評価され、右へと進んでいく。

例-1
       a || b && c && d && e || f && g || h
=((((((a || b)&& c)&& d)&& e)|| f)&& g)|| h
例-2
//    1         2       3      4
  undefined && true ||  0  && [6] // = 0  ← 3
=(undefined && true)||  0  && [6]
= undefined         ||  0  && [6]
=(undefined         ||  0 )&& [6]
=                       0  && [6]
=                       0

上記の例のように括弧を一切使わずに論理演算を直列すると、必ず全ての値がチェックされることになるので計算効率が悪い
各値が true / false 判定される確率を考慮し、適切に括弧で括るべき.

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?