부울린 타입은 공부하기 좀 지루합니다.
이유는 다음과 같습니다.
아래 코드는 true 또는 false를 사용하여 변수를 초기화할 때마다 부울린 타입을 생성합니다.
let sunny = false;
let traffic = true;
축하합니다.
위 코드를 이해한 것으로도 부울린 타입을 80% 정도 이해한 것입니다.
물론 80%는 충분치 않을 수도 있습니다.
여기에서 조금 더 확장 할 것은 나머지 20%에 해당되는 Boolean Object와 Boolean 함수,
그리고 아주 중요한 비교 연산자 ===, !== 에 대해 알아볼 예정입니다.
Boolean 객체
부울린 타입은 보통 프리미티브로 사용됩니다.
부울린 프리미티브가 어떻게 생겼는지 조금 전 위에서 본 코드를 다시 보겠습니다.
let sunny = false;
let traffic = true;
이제 부울린 객체를 보겠습니다.
이미 여러 번 보셨 듯이 모든 기본 요소 뒤에는 그림자 속에 숨어있는 객체 기반 표현이 있습니다.
새 부울린 객체를 만드는 방법은 new 키워드, 부울린 생성자 이름 및 초기 값을 사용하는 것입니다.
let boolObject = new Boolean(false);
let anotherBool = new Boolean(true);
Boolean 생성자에 전달할 수있는 초기 값은 일반적으로 true 및 false이지만
연산 결과가 최종적으로 true 또는 false가 되는 거의 모든 것을 전달할 수 있습니다.
어떤 종류의 값이 true 또는 false 결과를 가져올 지에 대해 자세히 설명하겠습니다.
부울린 객체를 사용하는 경우는 진짜로 객체로 만들 생각인 경우를 제외하고는 그냥 프리미티브 타입의 부울린을 쓰십시오.
왜냐하면 부울린 타입은 true 나 false 밖에 없어 보기에도 진짜 간단하기 때문입니다.
Boolean 함수
Boolean 생성자가 제공하는 한 가지 주요 이점이 있으며
그 이점은 Boolean 객체를 만드는 과정에서 임의의 값이나 표현식을 전달할 수 있다는 점입니다.
let boolObject = new Boolean(< arbitrary expression >);
최종 데이터가 true 또는 false가 아닌 부울린 식을 평가하고 싶을 수 있기 때문에 이 방식은 정말 유리합니다.
외부 데이터 또는 코드를 처리할 때 일반적이며 다양한 false 또는 true 값 중 어떤 값을 얻을지 예측할 수 없습니다.
다음은 인위적인 예입니다.
let isMovieAvailable = getMovieData()[4];
isMovieAvailable의 값은 아마도 true 또는 false일 겁니다.
데이터 처리와 관련하여 어떤 시점에서 무언가가 깨지거나 반환되는 내용이 변경된다는 보장이 없는 경우가 많습니다.
실생활에서와 마찬가지로, 실행 가능한 조치를 취하지 않고는 일이 잘 작동하기를 바라는 것만으로는 충분하지 않습니다.
부울린 함수는 그러한 단계 중 하나입니다.
부울린 함수를 만드는 것은 조금 과도 할 수 있습니다.
왜냐하면 Boolean 생성자의 단점은 부울린 객체가 남아 있다는 것입니다.
이는 바람직하지 않습니다.
다행히도 부울린 프리미티브의 가벼움으로 부울린 생성자의 유연성을 매우 쉽게 얻을 수 있는 방법이 있습니다.
그 방법은 Boolean 함수를 이용하는 겁니다.
let bool = Boolean(true);
최종적으로 프리미티브 부울린 값인 true 또는 false가 리턴되는 부울린 함수에 그 인자로 임의의 값이나 표현식 아무거나 넣을 수 있습니다.
생성자 접근 방식과 비교하여 다른 점은 new 키워드를 안 쓴다는 겁니다.
어쨌든 잠시 시간을 내어 Boolean 함수에 전달할 수 있는 다양한 표현식 및 값을 살펴보겠습니다.
이 모든 사항은 이전 섹션에서 보았던 Boolean 생성자에 전달할 수 있는 항목에도 적용됩니다.
false를 반환하기 위해 전달할 수있는 값은 null, undefined, 빈 인자, 0, 빈 스트링, false입니다.
let bool;
bool = Boolean(null);
bool = Boolean(undefined);
bool = Boolean();
bool = Boolean(0);
bool = Boolean("");
bool = Boolean(false);
이 모든 예에서 bool 변수는 false를 반환합니다.
true를 반환하려면 위에서 보았던 false를 반환하는 예 말고 다른 것을 넣으며 됩니다.
let bool;
bool = Boolean(true);
bool = Boolean("hello");
bool = Boolean(new Boolean()); // 인셉션 영화 같죠?
bool = Boolean("false"); // "false" 는 스트링입니다.
bool = Boolean({});
bool = Boolean(3.14);
bool = Boolean(["a", "b", "c"]);
이 예에서 bool 변수는 true를 반환합니다.
일부 예제가 이상하게 보일 수 있으므로 여기에서 작동하는 몇 가지 미묘한 사항을 살펴보겠습니다.
new Boolean (new Boolean ())과 같은 객체인 경우 평가결과는 항상 true입니다.
그 이유는 객체가 존재하는 것만으로도 true 스위치를 트리거하고 new Boolean ()을 호출하면 새 객체가 생성되기 때문입니다.
이 논리를 약간 확장하면 다음 if 문이 실제로 참이 됨을 의미합니다.
let boolObject = new Boolean(false);
if (boolObject) {
alert("Bool, you so crazy!!!");
}
우리가 평가하는 객체가 은밀하게 변장된 거짓인지... 또는 String 객체 나 Array 등등인지는 중요하지 않습니다.
프리미티브에 대한 규칙은 더 간단합니다
. null, undefined, 0, 빈 문자열, NaN 또는 false 이외의 모든 항목은 true가 됩니다.
엄격 비교 연산자
마지막으로 살펴볼 것은 타입과 부울린에 대해 알고 있는 것을 결합하여 이전에 보았던 다양한 조건부 연산자에 트위스트를 추가하는 것입니다.
우리는 == 및 !=에 대해 이전에 배웠으며 아마도 몇 번 사용되는 것을 보았을 것입니다.
이들은 두 가지가 같거나 같지 않은지 알려주는 같음 및 같지 않음 연산자입니다.
다음은 트위스트를 추가한 것입니다. 우리가 알지 못하는 미묘하고 비정상적인 행동이 있습니다.
function theSolution(answer) {
if (answer == 42) {
alert("You have nothing more to learn!");
}
}
theSolution("42"); //42 is passed in as a string
이 예에서 answer == 42 식은 true로 평가됩니다.
"42"가 문자열이고 또는 42가 숫자가 아닌지 확인하더라도 작동합니다.
무슨 일이 일어나고 있는 걸까요? 어떤 언어에서 문자열과 숫자가 같습니까?
그러나 자바스크립트는 다릅니다.
여기서 == 및 != 연산자를 사용하면 이는 예상된 동작입니다.
비교하려는 두 가지 값은 42입니다.
이 작업을 수행하기 위해 JavaScript는 두 개의 다르지만 유사한 두 값을 내부적으로 동일하게 만듭니다.
이를 타입 강제(type coercion)라고 합니다.
문제는 이 동작이 바람직하지 않을 수 있다는 것입니다.
특히 우리가 알지 못하는 상황에서 이런 일이 발생할 때 그렇습니다.
이와 같은 상황을 피하기 위해 더 엄격한 버전의 동등 및 부등 연산자가 있으며 각각 === 및 !==입니다.
이 연산자가 하는 일은 값과 유형을 모두 확인하고 타입 강제(type coercion)를 수행하지 않는 것입니다.
그들은 기본적으로 진정한 동등 또는 부등을 리턴하는 코드를 작성하도록 강요합니다.
그것은 좋은 일입니다.
== 연산자를 === 연산자로 대체하여 이전 예제를 수정하겠습니다.
function theSolution(answer) {
if (answer === 42) {
alert("You have nothing more to learn!");
}
}
theSolution("42"); //42 is passed in as a string
이번에는 조건식이 거짓으로 평가됩니다.
엄격 비교 연산자를 쓰면 문자열과 숫자는 값이 비슷 함에도 불구하고 다른 타입입니다.
타입 강제(type coercion)가 발생하지 않기 때문에 최종 결과는 거짓입니다.
자바스크립트에서는 항상 더 엄격한 형식의 동등, 부등 연산자를 사용하는 것이 일반적입니다.
어떤 경우 든 엄격한 형식을 동등, 부등 연산자를 사용하면 코드에서 오류를 발견하는 데 도움이 됩니다.
그렇지 않으면 식별하기 매우 어려울 수 있는 오류가 되고 맙니다.
결론
부울린은 코드에서 가장 자주 사용되는 타입 중 하나입니다.
표면에 보이는 단순성에도 불구하고 우리 코드가 다른 방향으로 분기되도록 하는 데 핵심적인 역할을 합니다.
아울러 엄격한 동등 및 부등 연산자를 사용해야 하는 경우는 앞으로 자주 발생할 겁니다.
다음 편에서는 null과 undefined에 대해 알아보겠습니다.
'코딩 > Javascript' 카테고리의 다른 글
[JS-중급편-OOP] 13. JSON 완전 분석 (0) | 2021.01.03 |
---|---|
[JS-중급편-OOP] 12. null,undefined 알아보기 (0) | 2021.01.02 |
티스토리 코드 하이라이트(highlight.js) 적용하기 (0) | 2020.12.31 |
티스토리 HTML 스킨 편집하기 (0) | 2020.12.31 |
[JS-중급편-OOP] 10.클래스 (0) | 2020.12.30 |