09장 타입 변환과 단축 평가
명시적 타입 변환, 타입 캐스팅 : 개발자가 의도적으로 값의 타입을 변환하는 것
암묵적 타입 변환, 타입 강제 변환: 개발자의 의도와 상관없이 표현식이 평가되는 도중 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것.
문자열 타입으로 변환
+연산자를 사용하고 피연산자중 하나 이상이 문자열일때
0+'' //'0'
1+ '' // '1'
true+ '' //'true'
문자열 타입으로 변환
산술 연산자를 사용할때,
+단항 연산자는 피연산자가 숫자 타입이 아니면 숫자 타입 의 값으로 암묵적 타입 변환을 수행
1- '1'//0
+ '' //0
+'0' //0
+false //0
단축 평가
단축 평가: 표현식을 평가하는 도중 평가 결과가 확정나는 경우 나머지 평가과정은 생략하는 것.
- 논리곱 연산자&& 는 논리 연산의 결과를 결정하는 두 번째 피연산자가그대로 반환.
- 논리합 연산자||는 논리 연산의 결과를 결정하는 첫 번째 피연산자가 그대로 반환.
단축 평가 활용
1. 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할때
var elem = null;
var value = elem && elem.value ; //null
2. 함수 매개변수에 기본값을 설정할때
function getString(str){
str= str || '';
return str.length;
}
getString(); //0
getString("hi"); //2
단축 평가
단축 평가: 표현식을 평가하는 도중 평가 결과가 확정나는 경우 나머지 평가과정은 생략하는 것.
- 논리곱 연산자&& 는 논리 연산의 결과를 결정하는 두 번째 피연산자가그대로 반환.
- 논리합 연산자||는 논리 연산의 결과를 결정하는 첫 번째 피연산자가 그대로 반환.
단축 평가 활용
1. 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할때
->단 좌항 피연산자가 falsy 한 값이면 좌항 피연산자 그대로 반환
var elem = null;
var value = elem && elem.value ; //null
2. 함수 매개변수에 기본값을 설정할때
function getString(str){
str= str || '';
return str.length;
}
getString(); //0
getString("hi"); //2
옵셔널 체이닝 연산자 ?.
논리 연산자 &&는 좌항 피연산자 중 falsy 한 값으로 평가되면 좌항 피연산자 그대로 반환하는 경향이 있는 반면 옵셔널 체이닝 연산자 ?.는 좌항 연산자가 falsy 한 값이라도 null, undefined 가 아니면 우항의 프로퍼티 참조를 이어갑니다.
var str = '';
var length= str&& str.length;
console.log(length); //falsy 해서 무조건 str 그대로 '' 가 출력
var str = '';
var length= str?.length;
console.log(length); //0
null 병합 연산자 ??
같은 개념으로 논리 연산자 || 는 좌항 연산자 중 falsy 한 값으로 평가되면 우항 피연산자 그대로 반환하는 경향이 있는 반면 null 병합 연산자는 좌항 피연산자가 falsy 한 값이라도 null, undefined 가 아니면 좌항의 프로퍼티 참조를 이어갑니다.
var foo = '' || 'default string';
console.log(foo); // default string
//null 과 undefined 일때만 기본값을 설정하고 싶다면
var foo = '' ?? 'default string';
console.log(foo); // ''
10장 객체 리터럴
자바스크립트의 객체는 함수와 밀접한 관계를 가진다. 함수로 객체를 생성하기도 하고 함수 자체가 객체이기도 하다.
인스턴스 : 클래스에 의해 생성되어 메모리에 저장된 실체.
객체지향 프로그래밍에서 객체= 클래스와 인스턴스를 포함한 개념.
프로퍼티 키: 빈 문자열을 포함하는 모든 문자열과 심벌값
식별자 네이밍을 안지켜도 되지만 식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표를 사용해야한다.
프로퍼티 키로 숫자 리터럴을 사용하면 따옴표는 붙지 않지만 내부적으로는 문자열로 반환된다.
var 와 같은 예약어를 프로퍼티키로 사용해도 에러가 발생하지 않지만 예상치못한 에러가 발생할 여지 0
var person = {
firstName : 'Eun-Hee',
'last-name' : 'Lee' // 식별자네이밍을 준수하지 않는 프로퍼티 키 에는 따옴표가 필수
}
대활호 프로퍼티 접근 연산자 내부에 지정하는프로퍼티 키는 따옴표로 감싼 문자열이여야 하며 감싸지 않으면 식별자로 해석함.
객체에 존재하지 않는 프로퍼티를 접근하면 referenceError 가 아닌 undefined 반환,
var person = {
name:'lee'
};
console.log(person[name]); //referenceError
console.log(person["name"]);//lee
계산된 프로퍼티 이름
var prefix = 'prop';
var i = 0;
var obj = {};
obj[prefix+'-'+ ++i]=i;
obj[prefix+'-'+ ++i]=i;
'독서' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 15장~17장 (0) | 2024.02.23 |
---|---|
[모던 자바스크립트 Deep Dive] 11장~14장 (0) | 2024.02.12 |
[모던 자바스크립트 Deep Dive] 07장 연산자,08장 제어문 (0) | 2024.02.02 |
[모던 자바스크립트 Deep Dive] 05장 표현식과 문, 06장 데이터 타입 (2) | 2024.02.01 |
[모던 자바스크립트 Deep Dive] 04 장 변수 (0) | 2023.10.10 |