JavaScript

실습 문제를 풀다가 콘솔을 찍어보니 new Date()에서의 현재 날짜의 월과 해당 값에서 월만 추출하는 getMonths()의 값이 달랐다.let date = new Date(); let month = date.getMonth() + 1; console.log('DATE', date); console.log('MONTH', month); let season = '봄'; if (3  getMonths() 값은 현재 월(月)보다 -1인 값이 나오는 현상을 발견했다🤔 찾아보니 JS가 열흘만에 급하게 만든 언어인지라 날짜 표기를 Java JDK1.0(1995) 버전을 카피해오면서 해당 버전에서 채택하는 zero-base를 따르게 된 것이었다.  그래서 특이하게 g..
프로토타입이란?자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어있고 이 부모 객체를 프로토타입이라고 한다.모든 객체는 자신의 "원형(Prototype)" 이 되는 객체를 가지며 이를 프로토타입이라고 한다. 그리고 모든 프로토타입은 생성자 함수와 연결되어 있다.객체의 프로토타입은 생성 방식에 따라 달라진다.객체 리터럴 생성 ⇒ Object.prototype생성자 함수로 생성 ⇒ 생성자 함수의 prototype 프로퍼티에 바인딩된 객체프로토타입 효과메모리 효율성Javascript에서 모든 객체는 프로토타입을 공유한다. 객체 자체가 스스로 메소드와 속성을 모두 가지는 대신 여러 객체가 동일한 프로토타입을 공유하도록하고 이를 사용하면 메모리를 효율적으로 사용할 수 있다.객체지향스러움프로토타입 ..
· 알고리즘
문제 조건 분석입력: 두 개의 자연수출력: 최대 공약수, 최소 공배수설계최대 공약수 ⇒ 작은 수의 약수를 구하고 순회하며 더 큰 수의 약수인지 확인 ⇒ 그 중 가장 큰 값최소 공배수 ⇒ 큰 수*작은 수 이하까지 순회하며 주어진 수로 나눴을 때 나누어 떨어지는지 확인 ⇒ 그 중 가장 작은 값다른 풀이JS에서 최대공약수, 최소공배수를 구하는 더 깔끔한 풀이와 유클리드 호제법 이용한 방법들은 참고자료 아티클을 통해 확인할 수 있었다.참고자료JS로 GCD, LCM 구하기
· 알고리즘
문제 조건 분석입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000), 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi. (-100,000 ≤ xi, yi ≤ 100,000)좌표는 항상 정수위치가 같은 두 점은 없다.출력: 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력설계이차 배열로 입력값 받아오기이후에 sort의 compareFn을 조건에 맞게 설계다른 풀이sort 비교함수 간단하면 분리 없이 이렇게 작성해도 괜찮을 것 같다.arr.sort(function (a, b) { if (a.x - b.x == 0) { return a.y - b.y; } else { return a.x - b.x; } });코드 개선forEach로 join하지 말고 sort 비교함수에서 구조 분해 할당으로 j..
모듈이란여러 기능에 관련된 코드가 모여 있는 하나의 파일모듈의 장점유지보수성네임 스페이스화재사용성JS에서의 모듈 개발을 위한 시도들 : CommonJS, UMD, ES6 등CommonJSJS 공식 스펙에서 브라우저만 지원했었기에 SSR/데스크탑에서 지원하려는 노력이 CommonJS라는 그룹이었다. 여기에서는 JS가 범용 언어로 쓰였기 때문에 모듈화가 필요했다.다른 모듈을 사용할 때는 require, 모듈을 스코프 밖으로 보낼 때는 module.exports를 사용하며 Node.js에서는 현재 이 방식을 쓴다.exports vs module.exportsexports도 사용 가능하지만 차이가 있다. module.exports를 참조하기에 직접 module.exports 값을 바꾸지 않고 객체 멤버를 생성하..
일급 객체의 조건무명의 리터럴로 생성 가능. 런타임에 생성 가능변수나 자료구조(객체, 배열 등)에 저장 가능함수의 매개변수에 전달 가능함수의 반환값으로 사용 가능⇒ 자바스크립트의 함수는 일급 객체이다. 즉, 객체와 동일하게 사용 가능하며 값과 동일 취급이 가능하다. 특히 매개변수, 반환값으로 사용 가능하다는 점은 함수형 프로그래밍을 가능하게 하는 JS의 장점이다.함수와 일반 객체의 차이점함수는 호출 가능하다함수는 함수 고유의 프로퍼티를 가진다arguments 프로퍼티caller 프로퍼티length 프로퍼티name 프로퍼티prototype 프로퍼티위의 프로퍼티들은 함수 객체의 데이터 프로퍼티. 하지만 아래의 접근자 프로퍼티는 Object.prototype을 상속받은 프로퍼티이다.proto 접근자 프로퍼티함..
함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 개념이다.“함수와 그 함수가 선언된 렉시컬 환경과의 조합” -MDN외부 함수보다 중첩 함수가 더 오래 유지될 때, 중첩 함수는 생명 주기가 종료된 외부 함수 변수를 여전히 참조할 수 있는데, 이런 중첩 함수를 클로저라고 한다.렉시컬 스코프이전에 다뤘듯이, 렉시컬 스코프란 정적 스코프라고도 하며, 함수 정의가 평가되는 시점에 함수가 호출된 위치가 아니라 함수가 정의된 위치에 따라 상위 스코프가 정적으로 결정된다.스코프의 실체는 실행 컨텍스트의 렉시컬 환경이고, 이 렉시컬 환경은 외부 렉시컬 환경에 대한 참조로 상위 렉시컬 환경과 연결되는 스코프 체인을 가진다.클로저의 원리함수 객체의 내부 슬롯 [[Environment]]함수가 정의된 환경과 ..
소스코드의 종류소스코드의 타입에 따라 실행 컨텍스트를 생성하는 과정과 내용이 다르다.전역 코드전역 변수 및 전역 함수를 전역 객체와 연결함수 코드지역 스코프를 전역 스코프 체인의 일원으로 연결eval 코드strict mode에서 독자적인 스코프 생성모듈 코드모듈별 독립적인 모듈 스코프 생성실행 컨텍스트란코드의 실행환경에 대한 여러가지 정보를 담고 있는 개념으로, 간단히 말하자면 자바스크립트 엔진에 의해 만들어지고 사용되는 코드 정보를 담은 객체의 집합이라고 할 수 있다.실행 컨텍스트의 역할JS 엔진의 소스코드 실행 과정전역 코드 평가(전역 실행 컨텍스트 생성)전역 코드 실행함수 호출되면 함수 코드 평가(함수 실행 컨텍스트 생성)함수 코드 실행소스코드를 평가하고(이때 선언문만 먼저 실행) 실행 컨텍스트를 ..
this의 필요성객체에서 메서드가 쓰이기 위해서는 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다.객체 리터럴로 쓰이면 재귀적으로 참조가 가능하긴 하다.const circle = {radius : 5,getDiameter(){ return 2 * circle.radius; }};console.log(circle.getDiameter()); // 10이게 가능한 이유는 객체 리터럴은 변수에 할당되기 직전, 미리 평가되기 때문에 circle을 참조할 수 있는 것이다.하지만 재귀적으로 참조하는 것을 일반적이지 않고 바람직하지 않은데, 다른 경우들에는 문제가 생길 수 있기 때문이다. 예를 들어 생성자 함수 방식으로 인스턴스를 생성한다고 생각해보자.function Circle(radius){ ???...
스코프식별자의 유효범위모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 선언 위치에 따라 다른 코드가 본인을 참조할 수 있는 유효 범위가 결정된다.JS 엔진은 렉시컬 환경(코드가 실행되는 위치나 환경)을 고려해 코드를 실행한다. ⇒ 이를 구현한 것이 실행 컨텍스트!var 키워드로 선언된 변수는 같은 스코프 내 중복 선언이 허용된다 → 변수값이 재할당되어 변경되는 부작용이 생긴다.스코프 종류변수가 선언된 위치로 구분된다.전역 스코프코드 가장 바깥에 선언어디서든 참조 가능지역 스코프함수 내부에서 선언선언된 위치와 하위 지역 스코프에서 유효하다.스코프 체인함수가 중첩될 수 있기 때문에 지역 스코프 중첩도 가능하다. 즉, 함수 중첩에 의해 스코프 또한 계층적 구조를 가질 수 있다.이렇듯 스코프가 계층적으..
jimyu
'JavaScript' 태그의 글 목록