진취적 삶
09 타입 변환과 단축 평가 본문
9.1 타입 변환이란 ?
개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환 또는 타입캐스팅이라고 한다.
var x = 10;
var str = x.toString();
console.log(typeof str, str);
console.log(typeof x, x);
개발자가 의도와는 상관없이 표현식을 평가하는 도중에 js 엔진에 의해 암묵적으로 타입이 자동 변환
암묵적 타입변환 , 타입 강제 변환
공백을 추가함으로서 타입을 강제 변환
var x = 10;
var str = x + " ";
console.log(typeof x, x);
console.log(typeof str, str);
명시적 타입 변환보다 암묵적 타입 변환이 가독성 측면에서 더 좋은 경우가 있기에
암묵적 타입변환이 발생하지 않도록 코드를 작성하는것은 아니다.
중요한것은 코드를 예측할수 있어야 한다는것 .
9.2 암묵적 타입 변환
'10'+2 // 102
5 *'10' //50
!0 // true
9.2.1 문자열 타입으로 변환
템플릿 리터럴 표현식 삽입은 표현식의 평가 결과를 암묵적으로 문자열 타입으로 변환
백틱 사용
0 +' ' // '0'
-0 +' ' // '0'
1 +' ' // '0'
-1 +' ' // '-1'
NaN +' ' // "NaN"
Infinity +'' // "Infinity"
9.2.2 숫자 타입으로 변환
- 단항 연산자는 피연산자가 숫자 타입의 값이 아니면 숫자 타입의 값으로 암묵적 타입 변환
+`` // 0
+`0` //0
+`1` //1
+`string` //string
+true // 1
+fasle //0
+null //0
9.2.2 불리언 타입으로 변환
js 엔진은 조건식의 평가 결과를 불리언 타입으로 암묵적 타입 변환한다.
if(``) // false
if(true) // true
if(0) //false
if('str') //true
if(null) //false
false 로 평가되는 falsy 값
- fasle
- undefined
- null
- 0,-0
- NaN
- ‘’
9.3 명시적 타입 변환
표준 빌트인 함수를 new 연산자 없이 호출하는 방법과 빌트인 메서드를 사용하는 방법
9.3.1 문자열 타입으로 변환
- string 생성자 함수를 new 연산자 없이 호출 string()
- Object.prototype.toString 메서드 사용 +tostring()
- 문자열 연결 연산자 이용 +
String(1)
String(NaN)
(1).toString()
(NaN).toString()
1+' '
NaN + ' '
9.3.2 숫자 타입으로 변환
- Number 생성자 함수를 new 연산자 없이 호출
- parseInt, parseFloat 함수를 사용
-
- 단항 산술연산자 사용
-
- 산술 연산자 사용
Number(0)
Number(true) //1
parseInt(0)
parseInt(true)//1
parseFloat(0)
parseFloat(true)//1
+ 0
+ true //1
'0'*1 //
'-1'*1
9.3.3 불리언 타입으로 변환
- Boolean 생성자 함수를 new 연산자 없이 호출하는 방법
- ! 부정 논리 연산자를 두 번 사용하는 방법
Boolean(0) //false
Boolean(1) //true
Boolean({}) //true
!!0 //false
!!1 //false
!!'fasle' //true
9.4 단축 평가
9.4.1 논리 연산자를 사용한 단축 평가
&& 연산자는 두개의 피연산자가 모두 true 평가될떄 true를 반환
'cat'&&'dog' // ->dog 반환
|| 연산자는 하나만 true 평가되어도 true 반환
'cat'||'dog' // -> cat 반환
논리곱(&&) 논리합(||) 연산자는 이처럼 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환한다. 이를 단축평가 한다.
- 단축평가 : 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는것을 말한다.
단축 평가 표현식 평가 결과
true | |
false | |
true && anything | anything |
false && anything | false |
const getStringLength = (str) => {
//instead of if check ,we can use truthy
str = str || "";
return str.length;
};
console.log(getStringLength());
console.log(getStringLength("hi"));
9.4.2 옵셔널 체이닝 연산자
?. 는 좌항의 피연산자가 null 또는 undefined인 경우 undefiend를 반환 하고 그렇지 않으면
우항의 프로퍼티 참조를 이어간다 .
var elem = null;
var value = elem?.value;
console.log(value) //undefiend
var str = ''
var length = str &&str.length;
//문자열이 길이를 참조하지 못한다 .
//str fasle 여서
console.log(length) // ''
옵셔널 체이닝 연산자는 ?. 좌항 피연산자가 false 로 평가되는 falsy 값 이라도 null 또는
undefined 가 아니면 우항의 프로퍼티 참조를 이어간다
var str = ''
var length = str ?.str.length;
//문자열이 길이를 참조하 지 못한다 .
console.log(length) // 0
9.4.3 null 병합 연산자
?? 좌항의 피연산자가 null 또는 undefined 인 경우 우항의 피연산자를 반환하고 , 그렇지 않으면
좌항의 피연산자를 반환한다.
var foo = null ?? 'default string'
console.log(foo) // default string
var foo = ''|| 'default string'
console.log(foor) // 'default string'
null 병합 연산자 ?? 좌항의 피연산자가 false 로 평가되는 (false ,undefined,null , 0, -0,NaN, ‘’)
이라도 null 또는 undefined 가 아니면 좌항의 피연산자를 그대로 반환
var foo = '' ?? 'default string'
console.log(foor) // ''
'개발 도서 > 자바스크립트 deepdive' 카테고리의 다른 글
07 연산자 (0) | 2023.07.11 |
---|---|
08 제어문 (0) | 2023.07.11 |
10 객체 리터럴 (0) | 2023.07.11 |
02 자바스크립트란? (0) | 2023.07.10 |
03 자바스크립트 개발 환경과 실행 방법 (0) | 2023.07.10 |