본문 바로가기

Today I Learned

(74)
모던 자바스크립트 Deep Dive 28장 Number 원시타입이기 때문에 Number 래퍼 객체를 생성한다. Number 프로퍼티 Number.EPSILON (엡실론) 1과 1보다 큰 값 중에서 가장 작은 값의 차이. 부동소수점으로 인한 오차 문제를 해결하기 위해 도입되었다. 0.1 + 0.2; // -> 0.30000000000000004 0.1 + 0.2 === 0.3; // -> false function isEqual(a, b){ // a와 b를 뺀 값의 절대값이 Number.EPSILON보다 작으면 같은 수로 인정한다. return Math.abs(a - b) true Number.MAX_SAFE_INTEGER 자바스크립트에서 안전하게 표현할 수 있는 가장 ..
모던 자바스크립트 Deep Dive 27장 배열 배열이란? 배열은 여러 개의 값을 순차적으로 나열한 자료구조다. 배열은 객체 타입이지만 일반 객체와는 다르게 length 프로퍼티와 값의 순서를 가진다. 배열은 객체이기 때문에 delete 연산자를 사용할 수 있다. 희소배열은 배열의 요소가 연속적으로 이어져있지 않은 배열을 말한다. 희소 배열의 length 와 배열 요소의 개수는 일치하지 않는다. 요소가 연속적으로 이어진 배열을 밀집 배열이라고 한다. 배열 메서드에는 원본 배열을 변경하는 메서드인 mutator method와 원본 배열을 변경하지 않고 새로운 배열을 생성하는 메서드인 accessor method가 있다. 되도록이면 accessor method를 사용하는 것이 좋다. push, shift, unshift 메서드는 모두 원본 배열을 변경한다..
모던 자바스크립트 Deep Dive 26장 ES6 함수의 추가 기능 메서드 ES6 이전의 모든 함수는 callable, construcor다. 콜백 함수도 constructor이기 때문에 불필요한 프로토타입 객체를 생성한다. ES6 사양에서 메서드는 메서드 축약 표현으로 정의된 함수만을 의미한다. const obj = { x: 1, // 메서드 foo() { return this.x; }, // 메서드 아님 bar: function() { return this.x; } } 메서드는 인스턴스를 생성할 수 없는 non-constructor이고, protorype 프로퍼티도 없고, 프로토타입도 생성하지 않는다. super 키워드 또한 사용할 수 있다. 객체 리터럴 반환 const create = (id, content) => ({ id, content }); const cre..
모던 자바스크립트 Deep Dive 25장 클래스 클래스 = 프로토타입의 문법적 설탕? 프로토타입 기반 객체지향 언어는 클래스가 필요없는 객체지향 프로그래밍 언어다. ES6에 도입된 클래스는 객체지향 프로그래밍에 익숙한 프로그래머가 더욱 빠르게 학습할 수 있도록 도입된 새로운 매커니즘이다. 클래스는 생성자 함수보다 엄격하고 생성자 함수가 제공하지 않는 기능도 제공한다. 클래스의 특징 클래스를 new 연산자없이 호출하면 에러가 난다. extends, super 키워드를 제공한다. 호이스팅이 발생하지 않는 것처럼 동작한다. 클래스 내의 코드는 암묵적으로 strict mode가 적용된다. [[Enumerable]] 프로퍼티 어트리뷰트 값이 false다. 클래스 정의 이름은 파스칼 케이스를 사용한다. 표현식을 사용해도 된다. 값처럼 사용할 수 있는 일급 객체다..
모던 자바스크립트 Deep Dive 24장 클로저 먼저 13장 스코프 참고하기. 렉시컬 스코프 함수가 "어디에 정의"되었는지에 따라 상위 스코프를 결정한다. "외부 렉시컬 환경에 대한 참조"에 저장할 참조값(상위 스코프에 대한 참조)은 함수 정의가 평가되는 시점에 함수가 정의된 환경에 의해 결정된다. 이것이 렉시컬 스코프다. 클로저와 렉시컬 환경 함수의 내부 슬롯 [[Environment]]에 자신의 상위 스코프의 참조(자신이 정의된 환경)를 저장한다. 중첩 함수는 이미 생명 주기가 종료된 외부 함수의 변수를 참조할 수 있다. 이 중첩함수를 클로저라고 한다. 자바스크립트의 모든 함수는 상위 스코프를 기억하고 있다. 그러므로 이론상 모든 함수는 클로저다. 하지만 더 까다로운 조건을 만족해야 한다. ①상위 스코프의 식별자를 참조하고, ②생명 주기가 외부함수..
모던 자바스크립트 Deep Dive 22장 this this 키워드란? this 키워드를 알아보기 앞서 객체 리터럴 방식으로 생성한 객체의 경우를 살펴봐야 한다. const circle = { radius: 5, getDiameter(){ return 2 * circle.radius; // (*) } } (*) 객체 리터럴 방식으로 생성한 객체의 경우, 메서드 내부에서 자신이 속한 객체를 가리키는 식별자를 재귀적으로 참조할 수 있다. 하지만 이런 경우는 바람직하지 않다. 인스턴스를 생성하기 전의 생성자 함수는 자신이 생성할 인스턴스를 가리키는 특수한 식별자가 필요하다. 그것이 this라는 특수한 식별자이다. this 바인딩 this 바인딩은 함수 호출 시점에 따라 결정된다. 1. 일반 함수 호출 일반함수 내부의 this는 전역 객체(window 또는 gl..

728x90