목록WEB (32)
on your mark

6.2 나머지 매개변수와 스프레드 문법 임의의(정해지지 않은) 수의 인수를 받는 방법 나머지 매개변수 ... 함수를 정의할 땐 인수를 두 개만 받도록 하고, 실제 함수를 호출할 땐 이보다 더 많은 '여분의' 인수를 전달해도 에러가 발생하지 않는다. 다만 반환 값은 처음 두 개의 인수만을 사용해 계산된다. 이렇게 여분의 매개변수는 그 값들을 담을 배열 이름을 마침표 세 개 ... 뒤에 붙여주면 함수 선언부에 포함시킬 수 있다. function sumAll(...arg) { let sum = 0; for(let arg of args) sum += arg; return sum; } alert( sumAll(1) ); // 1 alert( sumAll(1,2) ); // 3 alert( sumAl..

6.1 재귀와 스택 함수가 자기자신을 호출할 수도 있는데, 이를 재귀라고 한다 실행 컨텍스트와 스택 실제 재귀 호출이 어떻게 동작하는가 실행 중인 함수의 실행 절차에 대한 정보는 해당 함수의 실행 컨텍스트에 저장된다. 실행 컨텍스트는 함수 실행에 대한 세부 정보를 담고 있는 내부 데이터 구조이다. 제어 흐름의 현재 위치, 변수의 현재 값, this의 값 등 상세 내부 정보가 실행 컨텍스트에 저장된다. 함수 호출 1회당 정확히 하나의 실행 컨텍스트가 생성된다. 함수 내부에 중첩 호출이 있을 때는 다음과 같은 절차가 수행된다. 현재 함수의 실행이 일시 중지됨 중지된 함수와 연관된 실행 컨텍스트는 실행 컨텍스트 스택에 저장됨 중첩 호출 실행 중첩 호출 실행 완료 후 실행 컨텍스트 스택에서 일시 중단한 함수의 ..

5.12 JSON과 메서드 JSON.stringify JSON은 본래 자바스크립트에서 사용할 목적으로 만들어진 포맷이다. 그런데 라이브러리를 사용하면 자바스크립트가 아닌 언어에서도 JSON을 충분히 다룰 수 있어, JSON을 데이터 교환 목적으로 사용하는 경우가 많다. JSON.stringify - 객체를 JSON으로 바꿔준다. JSON.parse - JSON을 객체로 바꿔준다. JSON.stringify는 객체뿐만 아니라 원시값에도 적용 가능하다. JSON은 데이터 교환을 목적으로 만들어진 언어에 종속되지 않는 포맷이다. 따라서 자바스크립트 특유의 객체 프로퍼티는 JSON.stringify가 처리할 수 없다. JSON.stringify 호출 시 무시되는 프로퍼티는 다음과 같다. 함수 프로퍼티(메서드) ..

5.11 Date 객체와 날짜 객체 생성하기 new Date()를 호출하면 새로운 Date 객체가 만들어진다. new Date() 인수 없이 호출하면 현재 날짜와 시간이 저장된 Date 객체가 반환된다. let now = new Date(); alert(now); // 현재 날짜 및 시간이 출력 new Date(miliseconds) 1970년 1월 1일 0시 0분 0초에서 milliseconds 후의 시점이 저장된 Date객체 반환 let Jan01_1970 = new Date(0); 1970년의 첫 날을 기준으로 흘러간 밀리초를 나타내는 정수는 타임스탬프라고 부른다. new Date(datestring) let date = new Date("2017-01-26"); // 인수로 시간은 지정하지 않았기..

5.10 구조 분해 할당 객체나 배열을 변수로 '분해'할 수 있게 해주는 구조 분해 할당 함수의 매개변수가 많거나, 매개변수 기본 값이 필요한 경우 등에서 구조 분해를 사용할 수 있다. 배열 분해하기 let arr = ["Bora", "Lee"]; let [firstName, surName] = arr; let [firstName, surName] = "Bora Lee".split(' '); 인덱스를 이용해 배열에 접근하지 않고도 변수로 이름과 성을 사용할 수 있다. 구조 분해 할당이란 명칭은 어떤 것을 복사한 이후에 변수로 분해 해준다는 의미 때문에 붙여졌다. 이 과정에서 분해 대상은 수정 또는 파괴되지 않습니다. 쉼표를 사용하면 필요하지 않은 요소를 버릴 수 있다. let..

tilde(~) 연산자 tilde 연산자는 비트연산자로 NOT의 기능을 한다. 아래와 같이 2진수일 때 0과 1만 뒤바뀐다. const a = 5; // 0000000000000101 console.log(~a); // 1111111111111010 // -6 double tilde(~~) tilde를 2번 반복해 주는 것 let k = 8; ~k; // -9 ~~k; // 8 Math.floor()를 대신해 사용할 수 있다. 속도 측면에서 ~~가 가장 빠르다고는 함 다만, 직관적이지 않아 사용하지 않는 것을 권장 undefined, null을 0으로 변환할 때 사용 undefined + 3 // NaN 의 상황이 생기는 경우를 방지할 수 있다. const arr = [1,1,1,2,2,3,3,3,3];..

5.9 Object.keys, values, entries keys(), values(), entries() 를 사용할 수 있는 자료구조는 Map Set Array 일반 객체에도 순회 관련 메서드가 있긴 한데, keys(), values(), entries()와 문법에 차이가 있다. Object.keys, values, entries Object.keys(obj) - 객체의 키만 담은 배열을 반환한다. Object.values(obj) - 객체의 값만 담은 배열을 반환한다. Object.entries(obj) - [key, value]쌍을 담은 배열을 반환한다. Map, Set, Array 전용 메서드와 일반 객체용 메서드의 차이를 비교하면 아래와 같다. 맵 객체 호출문법 map.keys() Object..

5.8 위크맵과 위크셋 let john = {name: "John"}; let map = new Map(); map.set(john, '...'); john = null; // 참조를 null로 덮어씀 // john을 나타내는 객체는 맵 안에 저장되어있다. // map.keys()를 이용하면 해당 객체를 얻는 것이 가능하다. for(let obj of map.keys()){ alert(JSON.stringify(obj)); } alert(map.size); 맵에서 객체를 키로 사용한 경우, 맵이 메모리에 있는 한 객체도 메모리에 남는다.(가비지 컬렉터의 대상이 되지 않는다.) 하지만 WeakMap은 다른 양상을 띄운다. 위크맵 위크맵의 키는 반드시 객체여야 한다. (원시값은 위크맵의 키가 ..