truthy & falsy
false
- "", ''
- 0
- undefined
- NaN
- null
- !true
truthy
- [],{}
- not !
- !fasly
- !falsy
! & !!
- type을 boolean으로 변경해줌
result.map(e=>e.id).filter(e=> !e) //false
result.map(e=>e.id).filter(e=> !!e) //ture
Optional Chaining
?.
- undefined이면 무시, 즉 참만 반환
- 함수나 대괄호와 함께 동작하는 특별한 문법 구조체(syntax construct)이다
- '앞'의 평가 대상이 undefined나 null이면 undefined를 반환하고, 그렇지 않으면 평가를 계속 진행한다.
- 계속 연결해서 체인을 만들면 중첩 프로퍼티들에 안전하게 접근할 수 있다.
주의
- 왼쪽 평가대상이 없어도 괜찮은 경우에만 선택적으로 사용해야 한다.
(남용하지 말것, 에러를 조기에 발견하지 못하고 디버깅이 어려워질 수 있다)
?.
앞의 변수는 꼭 선언되어 있어야 한다(에러발생)
- 앞에 평가대상에 값이 없으면 즉시 평가를 멈춘다. [단락평가(short-circuit)라고 함]
사용
- 옵셔널 체이닝 문법
?.
은 세 가지 형태로 사용할 수 있다
- obj?.prop – obj가 존재하면 obj.prop을 반환하고, 그렇지 않으면 undefined를 반환함
- obj?.[prop] – obj가 존재하면 obj[prop]을 반환하고, 그렇지 않으면 undefined를 반환함
- obj?.method() – obj가 존재하면 obj.method()를 호출하고, 그렇지 않으면 undefined를 반환함
문법
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
?? (물음표)
- nullish 병합연산자(nullish coalescing operator). 여러 피연산자 중 그 값이 확정되어있는 변수를 찾는다
- 왼쪽 값이 참이면 왼쪽값 아니면 오른쪽 값
- ex) a ?? b -> a가 null도 아니고 undefined도 아니면 a 그 외에 b
- '||'와 상당히 유사하지만 ||는 첫번째 truthy값을 반환하고,
??는 첫번째 정의된(defined)값을 반환한다