[JavaScript] 2-4. JavaScript String Type

JavaScript Boolean Type


부울 자료형 (Boolean Type)

boolean 타입에 해당하는 값은 true, false 두 가지가 있습니다.
이 값들은 불 자료형 혹은 진리값이라고 불립니다.
프로그래밍에서 진리값은 어떤 조건이 참인지 거짓인지 데이터의 값이 있는지 없는지 확인을 하기 위해 사용됩니다.

1 < 2; //  true
1 > 2; //  false
3 === 3; //  true
3 !== 3; //  false
Number.isFinite(3); //  true
Number.isFinite(Infinity); //  false
Number.isNaN(NaN); //  true
"hello".includes("o"); //  true

//값이 일치할 때(참)는 true를 결과 값이 불일치할 때(거짓)는 false를 반환합니다.



논리 연산자

// 논리 부정(logical Not)
!true; //  false
!false; //  true

// 논리합 (logical OR) - 둘 중 하나가 참이면 결과 값은 참이 됩니다. 둘 다 거짓일 경우만 거짓!
true || true; //  true
true || false; //  true
false || true; //  true
false || false; //  false

// ### 단, 논리합에 있어서 false || undefined와 같은 변환이 안되는 경우의 논리 합에 있어서는 두번째 대상자를 리턴합니다. undefined

// 논리곱 (logical AND) - 둘다 참이여야 결과 값은 참이 됩니다. 하나라도 거짓이라면 거짓!
true && true; //  true
true && false; //  false
false && true; //  false
false && false; //  false

// 삼항 연산자 (ternary operator) - 식 ? 참일 때 실행할 식 또는 값 : 거짓일 때 실행할 식 또는 값;
true ? 1 : 2; //  1
false ? 1 : 2; //  2



연산자 우선순위

숫자의 연산처리에서도 우선순위가 있듯이 부울 자료형에서도 연산자의 우선순위가 있습니다.

true || true && false;  //  true - ||은 더하기, &&은 곱하기입니다. 연산자의 우선순위는 곱하기가 우선이기에 true가 반환됩니다.
(true || true) && false;    //  false - 더하기인 ||에 괄호가 쳐져서 먼저 계산을 하게 됩니다. 그렇기에 결국 true && false의 결과인 false가 반환됩니다.
true || false && false);    //  true - false && false는 true 이기에 결국 true || true의 결과로 true가 반환됩니다.
(true || false) && false;   //  false - true || false는 true 이기에 결국 true && false의 결과로 false가 반환됩니다.



논리 연산의 여러가지 법칙

// a,b,c가 모두 boolean 타입이라고 할 때, 다음 식의 결과 값은 a, b, c의 값과 관계 없이 모두 true입니다.
// 헷갈릴 경우 a,b,c에 임의의 boolean값을 부여해서 이해하면 빠릅니다.

// 이중 부정
!!a === a;

// 교환 법칙
a || b == b || a;
a && b == b && a;

// 결합 법칙
(a || b) || c === a || (b || c);
(a && b) && c === a && (b && c);

// 분배 법칙
a || (b && c) === (a || b) && (a || c);
a && (b || c) === (a && b) || (a && c);

// 흡수 법칙
a && (a || b) === a;
a || (a && b) === a;

// 드 모르간의 법칙
!(a || b) === !a && !b;
!(a && b) === !a || !b;

// 그 밖에...
a || true === true;
a || false === a;
a && true === a;
a && false === false;

a || !a === true;
a && !a === false;

a || a === a;
a && a === a;



truthy & falsy

JS에서는 boolean 타입이 와야하는 자리에 다른 타입의 값이 와도 에러가 나지 않고 실행됩니다.

if (1) {
    console.log('문제없이 실행됩니다.');        //  if()안에 들어있는 인자값이 true 일때 해당 구문이 실행되는데 true는 값이 있다는 뜻을 의미합니다.
}

if (0) {
    console.log('실행 되지 않습니다.');          //  if()안에 들어있는 인자값이 false 일떄는 해당 구문이 실행되지 않습니다. 0은 값이 없다는 의미로 false와 같습니다.
}

if ("0") {
    console.log('그럼 이거는?');        //  이 구문은 실행됩니다. 0인데 왜 실행이 되냐면 ""처리를 하게되면 문자열로서 0이기에 값을 가짐으로 실행이됩니다.
}

이렇게 어떤 값들로 true로, 어떤 값들은 false로 취급되는데, 전자를 truthy 후자를 falsy라고 부릅니다.
JS에서는 false, null, undefined, 0, NaN, ''을 falsy로 취급하고 이를 제외한 모든 값을 truthy라고 합니다.
truthy와 falsy를 활용하면 짧은 코드를 작성할 수 있지만, 코드의 의미가 명확하지 않거나 논리적이지 못할 수 있기에 주의해서 사용해야 합니다.



다른 타입의 값을 진리값으로 변환하기

!!'hello';  //  true - !(NOT)을 이용하여 문자열을 진리 값으로 변환 (보통 이런 방법을 많이 사용합니다.)
Boolean('pizza');   // true - Boolean()메소드를 이용하여 문자열을 진리 값으로 변환



2. Today I Found Out

문자열 타입에 이어서 이 전에 승하쌤께서 강의해주신 부울 타입까지 공부하면서
지금까지 알던 것은 정리가 되었고, 모르던 것들에 대해서는 알게 되었습니다.
논리 연산자는 if문과 switch문등 다양한 제어구문에서도 활용이 가능하고,
로직 구성에 있어서 유용하게 사용하기에 꼭 알고 가도록 더 공부하겠습니다.

3. refer

https://helloworldjavascript.net/pages/150-boolean.html

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

https://stackoverflow.com/questions/7615214/in-javascript-why-is-0-equal-to-false-but-when-tested-by-if-it-is-not-fals