디스트럭처링 할당 (destructuring assignment), 구조 분해 할당구조화된 배열과 같은 이터러블 또는 객체를 비구조화하여 1개 이상의 변수에 개별적으로 할당하는 것필요한 값만 추출해 변수에 할당할 때 유용함 배열 구조 분해 할당배열 구조 분해 할당의 대상은 이터러블이어야 하며, 할당 기준은 배열의 인덱스임순서대로 할당됨변수의 개수와 이터러블의 요소의 개수가 반드시 일치할 필요는 없음배열 구조 분해 할당을 위한 변수에 Rest 요소 사용 가능const arr = [1,2,3];const [one, two, three] = arr;const [x, ...y] = arr;console(x,y); // 1 [2,3] 객체 구조 분해 할당각 프로퍼티를 객체로부터 추출해 1개 이상의 변수에 할당..
javascript
객체지향 프로그래밍 언어인 자바스크립트자바스크립트는 프로토타입 기반 객체지향 언어. 따라서 클래스가 필요 없음클래스 없이도 생성자 함수와 프로토타입을 통해 객체지향 언어의 상속 구현 가능함ES6에서 도입된 클래스는 기존 프로토타입 기반 객체지향 프로그래밍보다 자바나 C#에 익숙한 프로그래머가 빠르게 학습할 수 있는 객체 생성 매커니즘 제시var Person = (function () { //생성자 함수 function Person(name) { this.name = name; } //프로토타입 메서드 Person.prototype.sayHi = fuction () { console.log('Hi, My name is '+this.name); }; ..
내부 슬롯과 내부 메서드ECMAScript 사양에 정의된 대로 구현되어 자바스크립트 엔진에서 실제로 동작하지만 개발자가 직접 접근할 수 있도록 외부에 공개된 프로퍼티는 아님자바스크립트 엔진의 내부 로직원칙적으로 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않음단, 일부 내부 슬롯과 내부 메서드에 한해 접근 수단 제공함 (ex. [[Prototype]] => .__proto__ 를 통해 간접적으로 접근 가능) 프로퍼티 어트리뷰티와 프로퍼티 디스크립터 객체자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의함프로퍼티의 상태프로퍼티의 값 (value)값의 갱신 여부 (writable)열거 가능 여부 (enumerab..
var 키워드 선언 변수의 문제점변수 중복 선언 허용 => 먼저 선언된 변수 값이 의도치 않게 변경되는 부작용 발생함수 레벨 스코프 => 전역 변수를 남발하여 중복 선언되는 경우 발생변수 호이스팅 => 변수 선언문 이전에 변수를 참조하는 것은 에러를 발생시키지는 않지만 프로그램의 흐름상 맞지 않고 가독성을 떨어뜨려 오류를 발생시킬 수 있음 let 키워드변수 중복 선언 금지 => Syntax Error 발생블록 레벨 스코프변수 호이스팅이 발생하지 않는 것처럼 동작함 => Reference Error 발생선언 단계와 초기화 단계가 분리되어 진행됨 => 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 선언 단계가 실행되지만 초기화 단계는 변수 선언문에 도달했을 때 실행됨전역 객체의 프로퍼티가 아님일시적 사각..
변수의 생명 주기변수는 생성되고 소멸되는 생명 주기를 가지고 있음변수의 생명 주기 : 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점 지역 변수의 생명 주기지역 변수는 선언된 함수가 호출되면 생성되고 함수가 종료되면 소멸함즉, 지역 변수의 생명 주기는 함수의 생명 주기와 같음일반적으로 함수가 종료하면 함수가 생성한 스코프도 소멸하지만 누군가 스코프를 참조하고 있다면 해제되지 않고 생존함var x = 'global';function foo() { console.log(x); // undefined => 호이스팅은 스코프 단위로 동작하기 때문 var x = 'local';}foo();console.log(x); // global 전역 변수의 생명 주기전역 변..
객체다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조변경 가능한 값0개 이상의 프로퍼티로 구성된 집합함수도 일급 객체이므로 값으로 취급될 수 있고, 프로퍼티 값이 함수라면 메서드라고 칭함상태와 동작을 하나의 단위로 구조화 할 수 있음프로퍼티 : 객체의 상태를 나타내는 값메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작 인스턴스클래스에 의해 생성되어 메모리에 저장된 실체 객체 생성 방법객체 리터럴Object 생성자 함수생성자 함수Object.create 메서드클래스(ES6) 객체 리터럴중괄호 내에 0개 이상의 프로퍼티 정의변수가 할당되는 시점(런타임)에 자바스크립트 엔진은 객체 리터럴을 해석해 객체를 생성함중괄호 내에 프로퍼티를 정의하지 않으면 빈 객체가 생성됨객체 리터럴의 중괄..
타입 변환명시적 타입 변환 | 타입 캐스팅암묵적 타입 변환 | 타입 강제 변환둘 다 기존 원시 값을 직접 변경하는 것은 아님암묵적 타입 변환개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것자바스크립트 엔진이 표현식을 에러 없이 평가하기 위해 피연산자의 값을 암묵적 타입 변환해 새로운 타입의 값을 만들어 단 한 번 사용하고 버림코드의 문맥을 고려함 문자열 타입 변환+ 단항 연산자의 경우 피연산자가 숫자 타입이 아니면 숫자 타입의 값으로 암묵적 타입 변환 수행함Symbol, 객체, 빈배열이 아닌 배열, undefined은 NaN으로 변환됨 불리언 타입 변환자바스크립트 엔진은 불리언 타입이 아닌 값을 truthy 값 또는 falsy 값으로 구분f..
연산자 산술 연산자 문자열 연결 연산자 할당 연산자 비교 연산자 논리 연산자 타입 연산자 피연산자 연산의 대상 값으로 표현될 수 있는 표현식 산술 연산자 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값 생성 불가할 경우 NaN 반환 이항 산술 연산자 단항 산술 연산자 이항 산술 연산자 2개의 피연산자를 산술 연산하여 숫자 값 생성 피연산자의 값을 바꾸는 것이 아닌 새로운 값을 생성하는 것 + : 덧셈 - : 뺄셈 * : 곱셈 / : 나눗셈 % : 나머지 단항 산술 연산자 1개의 피연산자를 산술 연산하여 숫자값 생성 증가/감소 연산자는 피연산자의 값을 변경하는 부수 효과가 있다 즉, 피연산자의 값을 변경하는 암묵적 할당이 발생 ++ : 증가 -- : 감소 - : 양수를 음수로, 음수를 양수로 반전..