일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 출처 : https://www.boostcourse.org/
- 출처 : 코딩애플
- 출처는 코딩애플
- 김영한쌤
- 오종택개발자님
- 출처 : 코딩앙마
- 큰돌의 CS책
- 에릭노이먼
- 클린코드다시읽기
- 이웅모
- 흥달쌤
- 함수형 코딩
- 쏙쏙 들어오는 함수형코딩
- 갈길이 멀구나
- 쏙쏙들어오는함수형코딩
- 출처 : 자바스크립트 딥다이브
- 출처는 코딩앙마
- 고등애플
- 자바스크립트 딥다이브
- 생코님Redux
- 에릭 노먼드
- https://product.kyobobook.co.kr/detail/S000001952246
- 리엑트를 다루는 기술
- 쏙쏙 들어오는 함수형 코딩
- 출처 : 한입크기로 잘라먹는 타입스크립트
- 로버트 C마틴
- 나는 flux좋아...
- 에릭 노이먼
- 유틸리티타입은 공식문서 자주 보자
- 쏙속 들어오는 함수형코딩
- Today
- Total
흰둥씨의 개발장
[자바스크립트] 딥다이브) 타입변환과 단축평가 본문
1) 타입변환
- 명시적 타입변환 (= explicit coercion = 타입캐스팅 )
ㄴ개발자가 의도적으로 값타입 변환하는 것
let x = 10;
let str = x.toString(); // '10' 숫자 => 문자열
String(1); // 1
Infinity + '' //'Infinity' 암묵적 타입변환을 의도적으로 이용
Number('0'); // 0
ParseInt('0'); // 0 문자열 => 숫자열 (문자열만 변환가능)
parseFloat('10.2'); // 10.2. 문자열 => 숫자열 (문자열만 변환가능)
+'10'; // 10 문자열 => 숫자열
'10' * 1 // 10 문자열 => 숫자열
+true; // 1 boolean => 숫자열
true * 1 // 1 boolean => 숫자열
Boolean('x'); //true
Boolean(''); //false
Boolean({}); //true
Boolean([]); //true
!!'x'; //true
!!''; //false
!!0; //false
!!1; //true
!!Infinity; //true
!!null; //false
!!undefined;//false
!!{} //true
!![] //true
- 암묵적 타입변환 (= implicit coercion = 타입강제변환)
ㄴ개발자의도와는 상관없이 표현식 평가도중에 자바스크립트엔진이 암묵적으로 타입을 자동 변환하는 것
let x = 10;
let str = x + ""; //숫자가 문자열로 변경됨
"10" + 2 //"102" 문자열 타입으로 변환
5 * '10' //50
!0 // true
if(1) {} //true라면
- 1) 문자열로 타입변환
숫자 + '' = 문자열
boolean + '' = 문자열
null + '' =문자열
undefined + '' = 문자열
symbol + '' = 타입에러
객체 + '' = 문자열
(function(){}) + '' = 'function(){}'
Array + '' = 'function Array(){ [native code] }'
- 2) 숫자 타입으로 변환
1 - '1' //0
1 * '10' //10
1 / 'one' // NaN
'1' > 0 //true
+'' //0
+'0' //0
+'1' //1
+'string' // NaN
+true // 1
+false // 0
+null //0
+undefined // NaN
+Symbol() // typeError
+{} // NaN
+[] // 0
+[10, 20] // NaN
+(function(){}) // NaN
- 3) boolean으로 타입변환
ㄴ자바스크립트엔진은 boolean아닌 값을 truthy/ falsy로 구분함 => 암묵적 타입변환
if('') console.log(1);
if(true) console.log(2);
if(0) console.log(3);
if('str') console.log(4); //빈문자열아닌 문자열은 truthy
if(null) console.log(5);
//2
//4
2) 단축평가
- 1) 논리 연산자를 사용한 단축 평가
ㄴ if 문 대체 가능
&&는 피연산자가 모두 true로 평가 될때 true를 반환
첫번째 피연산자 고양이가 truthy이기 때문에 두번째 피연산자까지 평가해 보아야 함
논리 연산의 결과를 결정하는 피연산자를 그대로 반환
'고양이' && '강쥐' // '강쥐'
false && '강쥐' // false
let message = '';
if (true) message = '완료';
message = true && '완료';
|| 는 두개의 피연산자중 하나만 true로 평가되어도 true 반환
첫번째 피연산자 고양이가 truthy이기 때문에 두번째 피연산자 평가하지 않아도 표현식 평가가능
'고양이' || '강쥐' // '고양이'
false || '고양이' // '고양이'
let message = '';
if(!true) message = '미완';
message = !true || '미완';
객체를 가리키기를 기대하는 변수값이 객체가 아니라 null이나 undefined인지 확인하고 참조하고 싶을 때
let el = null;
let value = el.value // typeError
let value = el && el.value; // null
함수 매개변수에 기본값을 설정할 때
ㄴ함수호출시 인수를 전달하지 않으면 매개변수에는 undefined 할당 되어 에러 날수 있는데
매개변수의 기본값을 설정해서 에러 방지 할수 있음
function 문자열길이내놔 (str){ // (str ='') <= ES6에서는 매개변수 기본값 직접 설정가능
str = str || ''; //단축평가를 이용한 매개변수 기본값설정
return str.length;
}
문자열길이내놔(); // 0
문자열길이내놔('hi'); // 2
- 2) 옵셔널 체이닝 연산자 (?.)
ㄴES11
ㄴ좌항의 피연산자가 null또는 undefined인경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어감
ㄴ객체 가리키기를 기대하는 변수가 null or undefined가 아닌지 확인하고 프로퍼티 참조할 때 유용
let el = null;
let value = el?.value; //undefined
let VALUE = el && el.value; // null
다만 &&는 좌항의 피연산자가 falsy인 값(false, undefined, null, 0 , -0, NaN, '')이면 좌항의 피연산자를 그대로 반환함
let str = '' ;
let length = str?.length; // 0 => 좌항이 falsy여도 null또는 undefined가 아니면 프로퍼티 참조함
let LENGTH = str && str.length; //'' => 문자열의 길이를 참조하지 못 함
- 3) null병합 연산자 (??)
ㄴES11
ㄴ좌항의 피연산자가 null또는 undefined경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환
ㄴ변수의 기본값 설정시 유용
let name = null ?? 'default'; //'default'
let NAME = '' || 'default'; // 'default' <=공백자체도 유효한 값이어야 하는 경우엔 ||단축평가 안좋음
let MyName = '' ?? 'default'; // '' <=좌항이 null이나 undefined아니면 falsy한 값도 그대로 반환됨
'BoOk > JS deep dive' 카테고리의 다른 글
[자바스크립트] 딥다이브) 원시값과 객체의 비교 (0) | 2023.05.17 |
---|---|
[자바스크립트] 딥다이브) 객체 리터럴 (0) | 2023.05.01 |
[자바스크립트] 딥다이브) 제어문 (0) | 2023.04.26 |
[자바스크립트] 딥다이브) 연산자 (0) | 2023.04.21 |
[자바스크립트] 딥다이브) 데이터타입 (0) | 2023.04.20 |