JavaScript/TIL

[TIL] #3. Type Coercion

Hello, Big stranger 2020. 8. 16. 18:01

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