let x = 10;
//명시적 타입 변환
//숫자를 문자열로 타입 캐스팅
let str = x.toString();
console.log(typeof str, str)// string 10
// x변수의 값이 변경된 것은 아니다.
console.log(typeof x, x) //number 10
let str = x + '';
console.log(typeof str, str); // string 10
// x 변수의 값이 변경된 것은 아니다.
console.log(typeof x, x); // number 10
//피연산자가 모두 문자열 타입이어야 하는 문맥
'10' + 2 // '102'
//피연산자가 모두 숫자 타입이어야 하는 문맥
5 * '10' // 50
//피연산자 또는 표현식이 불리언 타입이어야 하는 문맥
!0 // true
if(1) {}
false로 평가되는 Falsy한 값들
- false
- undefined
- null
- 0, -0
- NaN
- ''(빈 문자열)
// 1. String 생성자 함수를 new 연산자 없이 호출하는 방법
// 숫자타입 -> 문자타입
String(1); // "1"
String(NaN); // "NaN"
// 불리언 타입 => 문자열 타입
String(true); //"true"
String(false); //"false"
// 2. toString 메소드 사용
(1).toString(); //"1"
(NaN).toString(); // "NaN"
// 불리언 타입 => 문자열 타입
(true).toString(); //"true"
(true).toString(); //"false"
// 3. 문자열 연결 연산자를 이용하는 방법
1 + ''; // "1"
NaN + ''; // "NaN"
// 1. Number 함수 이용
// 문자열 => 숫자타입
Number('0'); // 0
Number('-1'); // -1
// 불리언 타입 => 숫자타입
Number(true); // 1
Number(false); // 0
// 2. parseInt, parseFloat 사용(문자열만 변환 가능)
parseInt('0'); // 0
parseInt('-1'); // -1
// 3. + 단항 연산자
+'0'; // 0
+'-1'; // -1
// 불리언 타입도 가능함
// 4. * 산술 연산자 이용
// 문자열 => 숫자타입
'0' * 1; // 0
'-1' * 1; // -1
// 문자열 타입 => 불리언 타입
Boolean('x'); // true
Boolean(''); // false
Boolean('false'); // true
// 숫자 타입 => 불리언 타입
Boolean(0); // false
Boolean(1); // true
Boolean(NaN); // false
Boolean(Infinity); // true
// null 타입 => 불리언 타입
Boolean(null); // false
// undefined 타입 => 불리언 타입
Boolean(undefined); // false
// 객체 타입 => 불리언 타입
Boolean({}); // true
Boolean([]); // true
// 문자열 타입 => 불리언 타입
!!'x'; // true
!!''; // false
!!'false'; // true
// 숫자 타입 => 불리언 타입
!!0; // false
!!1; // true
!!NaN; // false
!!Infinity; // true
// null 타입 => 불리언 타입
!!undefined; // false
// 객체 타입 => 불리언 타입
!!{}; // true
!![]; // true
'Cat' && 'Dog' // "Dog"
'Cat' || 'Dog' // "Cat"
var done = true;
var message = '';
//주어진 조건이 true일 때
if (done) message = '완료';
//done이 true라면 message에 '완료'할당
message = done && '완료';
console.log(message); //완료
var done = false;
var message = '';
//주어진 조건이 false일 때
if (done) message = '미완료'
//done이 false라면 message에 '미완료'할당
message = done || '미완료';
console.log(message); //미완료
var done = true;
var message = '';
// if...else문
if (done) message = '완료'
else message = '미완료'
console.log(message); //완료
// 삼항 조건 연산자는 if...else문을 대체할 수 있다
message = done ? '완료' : '미완료';
console.log(message); //완료
var elem = null;
// elem이 null또는 undefined이면 undefined 반환, 그렇지 않으면 우항의 프로퍼티 참조를 이어감
var value = elem?.value;
console.log(value); // undefined
var str = '';
var length = str?.length;
console.log(length); // 0
var foo = null ?? 'default string';
console.log(foo); // "default string"
✍️연습문제 - 값을 예상해보세요
const foo = 0;
const bar = '안녕하세요'; //빈문자가 아니라 true한 값
const jar = true;
console.log(foo && bar); // 0
console.log(foo || bar); // '안녕하세요'
console.log(bar || foo); // '안녕하세요'
console.log(jar || bar); // true
console.log(jar && foo); // 0