JS 딥다이브
-
48장. 모듈책/모던 자바스크립트 딥다이브 2022. 7. 10. 20:07
48장. 모듈 48-1. 모듈의 일반적 의미 모듈이란 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각을 말한다. 모듈이 성립하려면 모듈은 자신만의 파일 스코프를 가질 수 있어야 한다. 모듈은 개별적 존재로서 애플리케이션과 분리되어 존재한다. export 된 모듈의 자산은 다른 모듈에서 재사용할 수 있다. 이때 공개된 모듈의 자산을 사용하는 모듈을 module consumer라 한다. 48-2. 자바스크립트와 모듈 이전에 JS는 import, export를 지원하지 않아 여러 개의 파일로 분리하여 script 태그로 로드해도 분리된 자바스크립트 파일들은 결국 하나의 자바스크립트 파일 내에 있는 것처럼 동작한다. 이러한 상황에서 제안된 것이 CommonJS, Asynchronous Modul..
-
47장. 에러 처리책/모던 자바스크립트 딥다이브 2022. 7. 10. 20:06
47장. 에러 처리 47-1. 에러 처리의 필요성 에러가 발생하지 않는 코드를 작성하는 것은 불가능하다. 따라서 언제나 예외적인 상황이 발생할 수 있다는 것을 전제하고 이에 대응하는 코드를 작성하자. 47-2. try … catch … finally 문 console.log('start...'); try { foo(); } catch (e) { console.log(e); } finally { console.log('finally'); } console.log('end...'); 47-3. Error 객체 Error 생성자 함수가 생성한 에러 객체는 message, stack 프로퍼티를 갖는다. message는 Error 생성자 함수에 인수로 전달한 에러 메시지, stack은 에러를 발생시킨 콜 스택의 ..
-
33장. 7번째 데이터 타입 Symbol책/모던 자바스크립트 딥다이브 2022. 7. 10. 20:06
33장. 7번째 데이터 타입 Symbol 33-1. 심벌이란? Symbol은 ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값이다. Symbol 값은 다른 값과 중복되지 않는 유일무이한 값이다. 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용한다. 33-2. 심벌 값의 생성 Symbol 함수 다른 원시 값은 리터럴 표기법을 통해 값을 생성할 수 있지만 심벌 값은 Symbol 함수를 호출하여 생성해야 한다. 이때 심벌 값은 외부로 노출되지 않아 확인할 수 없으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다. const mySymbol = Symbol(); console.log(typeof mySymbol); // symbol console.log(mySymb..
-
34장. 이터러블책/모던 자바스크립트 딥다이브 2022. 7. 8. 22:09
34장. 이터러블 34-1. 이터레이션 프로토콜 이터레이션 프로토콜은 순회 가능한 데이터 컬렉션을 만들기 위해 ECMAScript 사양에 정의하여 미리 약속한 규칙이다. ES6 이전의 순회 가능한 데이터 컬렉션은 나름의 구조를 가지고 다양한 방법으로 순회할 수 있었다. ES6에서는 순회 가능한 데이터 컬렉션을 이터레이션 프로토콜을 준수하는 이터러블로 통일하여 for…of, spread, distructuring 의 대상으로 사용할 수 있도록 일원화했다. 이터러블 프로토콜 (iterable protocol) Symbol.iterator를 프로퍼티 키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환..
-
32장. String책/모던 자바스크립트 딥다이브 2022. 6. 12. 20:32
32장. String 원시 타입인 문자열을 다룰 때 유용한 프로퍼티와 메서드를 제공한다. 32-1. String 생성자 함수 String 생성자 함수에 인수를 전달하지 않고 new 연산자와 함께 호출하면 [[StringData]] 내부 슬롯에 빈 문자열을 할당한 String 래퍼 객체를 생성한다. 문자열은 원시 값이므로 변경 불가 문자열이 아닌 값을 전달하면 문자열로 강제 변환한 후 [[StringData]] 내부 슬롯에 변환된 문자열을 할당한 String 래퍼 객체를 생성한다. const strObj = new String(); console.log(strObj); // String { length: 0, [[PrimitiveValue]]: "" } const strObj = new String('Le..
-
30장. Date책/모던 자바스크립트 딥다이브 2022. 6. 12. 20:32
30장. Date UTC(Coordinated Universal Time): 국제 표준시 GMT(Greenwich Mean Time): 그리니치 평균시 KST(Korea Standard Time): 한국 표준시, UTC + 9 UTC와 GMT는 초의 소수점 단위에서만 차이가 나기 때문에 일상에서는 혼용되어 사용된다. 기술적인 표기에는 UTC가 사용된다. 현재 날짜와 시간은 JS 코드가 실행된 시스템의 시계에 의해 결정된다. 30-1. Date 생성자 함수 Date 객체는 내부적으로 날짜와 시간을 나타내는 정수값을 갖는다. 1970년 1월 1일 00:00:00(UTC)를 기점으로 Date 객체가 나타내는 날짜와 시간까지의 밀리초를 나타낸다. 예를 들어 1970년 1월 2일0시는 정수값 86,400,000(..
-
29장. Math책/모던 자바스크립트 딥다이브 2022. 6. 12. 20:32
29장. Math 표준 빌트인 객체 Math 상수와 함수를 위한 프로퍼티, 메서드 제공 생성자 함수가 아니며, 정적 프로퍼티와 정적 메서드만 제공한다. 29-1. Math 프로퍼티 Math.PI Math.PI; // 3.141592653589793 29-2. Math 메서드 Math.abs 절대값을 반환 Math.abs(-1); // 1 Math.abs('-1'); // 1 Math.abs(''); // 0 Math.abs([]); // 0 Math.abs(null); // 0 Math.abs(undefined); // NaN Math.abs({}); // NaN Math.abs('string'); // NaN Math.abs(); // NaN Math.round 소수점 이하를 반올림한 정수를 반환 Ma..
-
28장. Number책/모던 자바스크립트 딥다이브 2022. 6. 12. 20:31
28장. Number 28-1. Number 생성자 함수 생성자에 인수를 전달하지 않고 호출하면 [[NumberData]] 내무 슬롯에 0을 할당한 Number 래퍼 객체를 생성한다. 인수로 숫자를 전달하면 [[NumberData]] 내부 슬롯에 인수로 전달 받은 숫자를 할당한 Number 래퍼 객체를 생성한다. 인수로 숫자가 아닌 값을 전달하면 숫자로 강제 변환한다. 숫자로 변환할 수 없다면 NaN을 내부 슬롯에 할당한 Number 래퍼 객체를 생성한다. const numObj = new Number(); console.log(numObj); // Number {[[PrimitiveValue]]: 0} const numObj = new Number(10); console.log(numObj); // N..