객체안에 있는 bool변수들의 true/false를 체크하는 가장 좋은 방법은 무엇일까?

예를들어, 다음과 같은 객체 안에 4개의 bool 변수가 있다고 해보자.

const myObject = {
  foo1: false,
  foo2: true,
  foo3: false,
  foo4: true
};

이 상황에서 foo1foo3false인지 판단하기 위해서 if(!foo1 && !foo3)의 조건문을 쓰기만 하면 될까? 아니다

왜냐면 자바스크립트에는 falsy값과 truthy값이 있기 때문이다. 위 상황에 foo3의 값이 null이었어도 null은 falsy값이기 때문에 false로 취급되어 위에서 !foo3 = true가 되어버린다.

심지어, myObject에 foo3가 없는경우 myObject.foo3undefined가 되어 !myObject.foo3 -> true가 되어버린다.

그리고 지금은 변수가 4개라서 괜찮은데 변수가 2만개라면? 조건문 사용이 불가능하다.


그럼 실제로 내가 찾는 변수가 실제로 객체 안에 있으며 그 변수의 값이 true or false임을 찾는 방법엔 뭐가 있을까?

모든 경우의수에 대한 객체를 만들고 비교하기(무식한방법)

const hasFoo2andFoo4 = {
  foo1: false,
  foo2: true,
  foo3: false,
  foo4: true
}

const hasFoo3andFoo4 = {
  foo1: false,
  foo2: false,
  foo3: true,
  foo4: true
}

// ... 나머지 경우의 수 ...

// 그 후에
if (isEqual(myObject, hasFoo2andFoo4)) {
  // 오브젝트가 Foo2와 Foo4만 가지고 있는지 알 수 있습니다.
}

비트마스크를 활용하자.

(1).toStirng(2); // 1
(2).toString(2); // 10
(3877494).toString(2); // 1110110010101001110110