Type Coercion
이상해 보이지만 사실 자바스크립트가 잘 하고 있는 것을 알 수 있다.
console.log(4+ "hello"); // 4hello
console.log(4+4 + "hello"); // 8hello
console.log("" === true ); // false;
console.log(1 === true); // true;
console.log(66+true); // 67
이것이 자바스크립트의 특성이고, 잘 알아두면 인생의 도움이 될 수 있다. 모르면 나중에 두통을 유발할 수 있다.
이것을 Type Coercion 즉, 자바스크립트가 값을 변환시킨다는 뜻이다. 강제적으로 말이다.
console.log(66 + true); // 67
console.log(66 - false); // 66
여기서 true를 1로 변환시키고 그래서 값이 최종 67이 되는것이다.
만약에 false을 넣게 되면 0이 들어가게 되며 66이 나온다.
console.log(55 - true); // 54
54 가 나오는것을 볼수있으며 이것을 통해서 곱하기 더하기 나누기 뺄샘들을 할 수 있다.
console.log(55 * false); // 0
그러나 항상 더하기가 모든걸 숫자로 바꾸는 것은 아니다. 만약 여기 string이 있다면 다음과 같이 나온다.
console.log( 66 + "false"); // 66false
오직 더하기에서만 이렇게 덩어리가 된다. 이걸 loaded operator이라고 한다.
그렇다면 10 + 66 + false 를 하게 되면 어떻게 되는가? 76false가 될것이며, 그 이유는 자바스크립트느 왼쪽에서 오른쪽으로 읽기 때문이다.
console.log( 10 + 66 + "false") // 76false
이렇게 type coercion을 이해하는것은 중요하다. 이제 이걸 봤을때, 숫자로 변환했다는 것을 알게 된다.
그렇다면 다음과 같은 것은 true 일까? false 일까?
console.log("" === true);
답은 false로 나온다. 그 이유는 텅빈 string은 거짓이기 때문이다.
console.log(0 === true); // false
console.log(NaN === true); // false
console.log(undefined === true); // false
console.log(null === true); // false
//0은 참일까?, NaN은 참일까?, Undefined는 참일까? null은? 답은 아니다.
텅빈 string은 말이지 제로바이트이며, 그걸 0으로 변환시키며 0는 거짓이기때문에 false로 나온다.
'JavaScript > TIL' 카테고리의 다른 글
[TIL] #5. Scope (0) | 2020.08.17 |
---|---|
[TIL] #4. TYPE OF (0) | 2020.08.17 |
[TIL] #2. Value Types and Reference Types (0) | 2020.08.16 |
[TIL] #1. Primitive Types (0) | 2020.08.16 |
[TIL] #0. Call Stack (0) | 2020.08.04 |