10.toString() <<<<<< 10 + ''
// 가독성 측면에서 때로는 암묵적 타입변환이 더 좋기 때문에 사용한다.
// 중요한 것은 코드를 예측할 수 있어야 한다는 것
1 + '2' // '12'
// 숫자 타입
0 + '' // '0'
NaN + '' // 'NaN'
// 불리언 타입
true + '' // 'true'
1 - '1' // 0
1 * '10' // 10
1 / 'one' // NaN
'1' > 0 // true
+'' // 0
+'0' // 0
+'1' // 1
+ 'string' // NaN
+true // 1
+false // 0
false
undefined
null
0, -0
NaN
""(빈 문자열)
String(1) // "1"
String(NaN) // "NaN"
(1).toString(); // "1"
(NaN).toString(); // "NaN
1 + ''; // "1"
NaN + ''; // "NaN"
#### 숫자 타입으로 변환
1. Number 생성자 함수를 new 연산자 없이 호출하는 방법
```js
Number('0') // 0
Number('-1') // -1
parseInt('0') // 0
parseInt('-1') // -1
+'0' // 0
+'-1' // -1
'0' * 1 // 0
'-1' * 1 // -1
Boolean('x'); // true
!!'x'; // true
!! 'false' // true
단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
// 논리합(||) 연산자
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'
// 논리곱(&&) 연산자
'Cat' && 'Dog' // 'Dog'
false && 'Dog' // false
'Cat' && false // false
let done = true;
let message = '';
if (done) messgae = '완료';
message = done && '완료';
console.log(message); // 완료;
객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
let elem = null;
let value = elem.value; // Type Error;
let elem = null;
let value = elem && elem.value; // null
옵셔널 체이닝 연산자 ?.는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
let elem = null;
let value = elem?.value;
console.log(value); undefined
null 병합 연산자 ??는 좌항의 피연산자가 null 또는 undeifned인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. null 병합 연산자 ??는 변수에 기본값을 설정할 때 유용하다.
let foo = null ?? 'default string';
console.log(foo); // "default string"