22.11.21 월요일 108p~118p
09장 타입 변환과 단축 평가 || 타입
- 암묵적 타입 변환(타입 강제 변환)
개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것
ex) 10 + ‘’
- 문자열 타입으로 변환
자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자열 연결 연산자의 피연산자 중 문자열 타입이 아닌 피연산자를 문자열 타입으로 암묵적 타입 변환한다.
ex) 1 + ‘2’ // ‘12’
템플릿 리터럴의 표현식 삽입은 표현식 평가 결과를 문자열 타입으로 암묵적 타입 변환 한다.
ex) 1 + 1 = ${1 + 1} // “1+1 = 2”
- 숫자 타입으로 변환
자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자열 연결 연산자의 피연산자 중 문자열 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
이때 피연산자를 숫자 타입으로 변환할 수 없는 경우, 표현식의 평가 결과는 NaN이 된다.
ex) 1 / ‘one’ // NaN
비교 연산자 표현식을 평가할 때도 연산자의 피연산자 중 숫자 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
ex) ‘1’ > 0 // true
’+ 단항 연산자’는 피연산자가 숫자 타입의 값이 아니면 숫자 타입의 값으로 암묵적 타입 변환한다.
ex) +’’ // 0
ex) +’0’ // 0
ex) +’string’ // NaN
ex) +true // 1
- 불리언 타입으로 변환
자바스크립트 엔진은 불리언 타입이 아닌 값을 Truthy 값 또는 Falsy 값으로 구분한다.
Falsy한 값: false, undefined, null, 0/-0, NaN, ‘’
- 명시적 타입 변환(타입 캐스팅)
개발자가 의도적으로 값의 타입을 변환하는 것
ex) (10).toString()
- 문자열 타입으로 변환
String(1) // '1'
(1).toString() // '1'
1 + '' //'1'
- 숫자 타입으로 변환
Number(1) // 1
parseInt('0') // 0
+0 // 0
'0' * 1 // 0
- 불리언 타입으로 변환
Boolean('x') // true
Boolean('') // false
!!'x' // true
!!'' // false
22.11.22 화요일 118p~129p
09장 타입 변환과 단축 평가 || 단축 평가
논리곱 연산자와 논리합 연산자는 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환한다. 이를 단축 평가라 한다.
단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
true | anything => true |
false | anyting => anything |
true && anyting => anything
false && anyting => false
단축 평가를 사용하면 if문을 대체할 수 있다.
어떤 조건이 Truthy한 값일 때 무언가를 해야 한다면 논리곱 연산자를, Falsy한 값일 때 무언가를 해야한다면 논리합 연산자 표현식으로 if문을 대체할 수 있다.
let done = false;
let message = '';
message = done || '미완료'
console.log(message); // 미완료
- 옵셔널 체이닝 연산자(?.)
좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
let elem = null;
let value = elem?.value;
console.log(value); // undefined
좌항의 피연산자가 Falsy한 값이라도 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
let str = '';
let length = str?.length;
console.log(length); // 0
- null 병합 연산자(??)
좌항의 피연산자가 null 또는 undefine인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. null 병합 연산자 ?? 는 변수에 기본값을 설정할 때 유용하다.
let foo = null ?? 'string';
console.log(foo); // 'string'
좌항의 피연산자가 Falsy한 값이라도 null 또는 undefined가 아니면 좌항의 피연산자를 그대로 반환한다.
let foo = '' ?? 'string';
console.log(foo); // ''
10장 객체 리터럴
자바스크립트는 객체 기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 거의 ‘모든 것’이 객체다. 원시 타입의 값 즉 원시 값은 변경 불가능한 값이지만 객체 타입의 값, 즉 객체는 변경 가능한 값이다.
객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다.
자바스크립트의 함수는 일급 객쳉이므로 값으로 취급할 수 있다. 따라서 함수도 프로퍼티 값으로 사용할 수 있다. 프로퍼티 값이 함수일 경우 , 일반 함수와 구분하기 위해 메서드라 부른다.
- 객체 리터럴에 의한 객체 생성
프로퍼티 값이 함수일 경우 , 일반 함수와 구분하기 위해 메서드라 부른다.
이처럼 객체는 객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작할 수 있는 메서드를 모두 포함할 수 있기 때문에 상태와 동작을 하나의 단위로 구조화할 수 있어 유용하다.
객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임을 객체지향 프로그래밍이라 한다.
c++이나 자바 같은 클래스 기반 객체 지향 언어는 클래스를 사전에 정의하고 필요한 시점에 new 연산자와 함께 생성자를 호출하여 인스턴스를 생성하는 방식으로 객체를 생성한다.
자바스크립트는 프로토타입 기반 객체지향 언어로서 클래스 기반 객체지향 언어와는 달리 다양한 객체 생성 방법을 지원한다.
=> 객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스
이러한 객체 생성 방법 중 가장 일반적이고 간단한 방법은 객체 리터럴을 사용하는 방법이다.
ex) let person = { name : ‘Lee’, sayHello : function() { console.log(‘hi’) } };
- 프로퍼티
프로퍼티를 나열할 때는 쉼표로 구분한다.
22.11.23 수요일 130p~139p
10장 객체 리터럴
- 프로퍼티 삭제
delete 연산자는 객체의 프로퍼티를 삭제한다. 만약 존재하지 않는 프로퍼티를 삭제하면 아무런 에러없이 무시된다.
- 프로퍼티 축약 표현
프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키를 생략할 수 있다.
let x = 1, y = 2;
const obj = {x, y};
console.log(obj) // { x:1, y:2 }
- 메서드 축약 표현
ES6에서는 메서드를 정의할 때 function 키워드를 생략한 축약 표현을 사용할 수 있다.
const obj = {
name : 'Lee',
sayHi() {
console.log('hi');
}
}
11장 원시 값과 객체의 비교 || 원시 값
- 원시 값
원시 값은 변경 불가능한 값이다. 먼저 변수와 값은 구분해서 생각해야 한다. 변경 불가능하다는 것은 변수가 아니라 값에 대한 진술이다.
변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경하다. 값의 이러한 특성을 불변성이라 한다.
불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다.
'CS > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
19장 프로토타입(1) (0) | 2023.04.05 |
---|---|
11장 원시값과 객체의 비교 / 12장 함수 (0) | 2023.04.05 |
7장 연산자 / 8장 제어문 (0) | 2023.04.05 |
4장 변수 / 5장 표현식과 문 / 6장 데이터 타입 (0) | 2023.04.05 |
1장 프로그래밍 / 03장 자바스크립트 개발 환경과 실행 방법 (0) | 2023.04.05 |