[과제] JavaScript Koans
Bare Minimum Requirements
1. 모든 테스트가 통과되도록 할 것
2. 학습 완료한 주제는 10/10개, 학습 완료한 Koans들은 51/51개여야 함
[01_Introduction]
expect 함수
: expect(테스트하는 값). 기대한 조건
- expect(isEven(3)).to.be.true → 'isEven(3)'의 결과값은 참이어야 한다
- expect(1 + 2).to.equal(3) → 'sum(1, 2)'의 결과값은 3과 같아야 한다
- 기대하는 값이 표현식이거나 함수의 실제 실행 결과
- '기대하는 값과 특정 값을 비교한 결과'가 true인지 확인
let actualValue = 1 + 1;
let expectedValue = 2;
expect(actualValue === expectedValue).to.be.true;
- '테스트 하는 값'이 '기대하는 값'과 같은지 직접 확인
// .equal은 두 값이 타입까지 엄격하게 같은지 검사(strict equality, ===)
let expectaedValue = 2;
expect(1+1).to.equal(expectedValue);
[02_Types-part1]
type
- 비교연산자 '=='는 두 값의 일치 여부를 느슨하게 검사(loose equality)
- 비교연산자 '==='는 두 값의 일치 여부를 엄격하게 검사(strict equality)
[03_LetConst]
const
- const는 재할당(reassignment) 금지
- const로 선언된 배열의 경우, 새로운 요소를 추가하거나 삭제할 수는 있음! 재할당은 금지!
- const로 선언된 객체의 경우, 속성을 추가하거나 삭제 할 수 있음! 재할당은 금지!
[04_Scope]
스코프(scope)
- 변수의 값(변수에 담긴 값)을 찾을 때 확인하는 범위
호이스팅(hoisting)
: 상황에 따라 변수의 선언과 할당을 분리해서 선언 부분을 스코프 가장 위쪽으로 올리는 것
- 자바스크립트 해석기는 함수 소스를 훑어보면서 var을 사용한 함수는 따로 기억해 둔다
- 즉, 변수를 실행하기 전에 '이런 함수가 있구나'하고 기억해 두기 때문에 마치 선얺나 것과 같은 효과가 있는 것을 호이스팅이라고 함
- 간혹 호이스팅처럼 var 예약어를 사용한 변수는 선언하기 전에 사용하면 오류를 발생 시킬 수 있다
클로저(closure)
: 함수와 함수가 선언된 어휘적 환경의 조합.
이 환경은 클로저가 생성된 시점의 유효 점위 내에 있는 모든 지역 변수로 구성
- 클로저 함수 : 외부 변수를 기억하고 이 외부 변수에 접근 할 수 있는 내부 함수
[05_ArrowFunction]
화살표 함수
1. 함수 표현식
2. function 키워드를 생략하고 화살표 => 를 붙인다
3. 리턴을 생략할 수 있다
4. 필요에 따라 소괄호를 붙일 수 있다
5. 파라미터가 하나일 경우 소괄호 생략이 가능하다
[06_Types-part2]
원시 자료형
: 객체가 아니면서 method를 가지지 않는 6가지 데이터
- string, number, bigint, boolean, undefined, symbol, (null)
- 값 자체에 대한 변경이 불가능(immutable)
- 원시 자료형을 변수에 할당할 경우, 값 자체의 복사가 일어남
- 원시 자료형 또는 원시 자료형의 데이터를 함수의 전달인자로 전달한 경우, 값 자체의 복사가 일어남
- 함수의 전달 인자도 변수에 자료(data)를 할당하는 것임
- 함수를 호출하면서 넘긴 전달인자가 호출된 함수의 지역변수로 (매 호출 시마다) 새롭게 선언
참조 자료형
: 원시 자료형이 아닌 모든 것이 참조 자료형임
- 배열([]), 객체({}), 함수(function)(){}) 이 대표적
- stack : 원시 자료의 데이터가 저장되는 공간 / heap : 동적으로 변하는 데이터가 저장되는 공간
- 참조 자료형의 데이터는 동적(dynamic)으로 변함
- 참조 자료형을 변수에 할당할 경우, 데이터의 주소가 저장됨
[07_Array]
- 메소드 중 slice를 이용시 arr.slice(0)는 배열 arr 전체를 복사
- Array를 함수의 전달 인자로 전달할 경우, reference가 전달 됨
[08_Object]
객체
- method는 항상 '어떤 객체'의 method임.
- 따라서 this는 호출될 때마다 어떠한 객체의 메소드 일 텐데, 그 어떠한 객체를 묻는 것이 this임
- 'this'는 method를 호출하는 시점에 결정 됨
+ 그러나 화살표 함수는 자신의 this가 없다. 화살표 함수에서 this는 자신을 감싼 정적 범위(lexical content)임
화살표 함수는 일반 변수 조회 규칙을 따르기 때문에, 현재 범위에서 존재하지 않는 this를 찾을 때 화살표 함수 바로 바깥 범위에서 this를 찾음!
- 객체를 함수의 전달인자로 전달 할 경우, reference가 전달 됨
[09_SpreadSyntax]
- 여러 객체를 병합 할 수 있으나 복사 시 reference가 복사되는 것이 아니고 value가 복사되는 것이다
- spread syntax 는 배열로 나타나고 spread 도입 이전에는 arguments를 통해 함수 인자를 전달했으며 모든 함수의 실행 시 자동으로 생성되는 객체이다
[10_Destructuring]
구조 분해 할당
- 배열을 분해 한다
- rest/spread 문법을 배열 분해에 적용할 수 있다
- 다음과 같이 할당하기 전 왼쪽에는, rest 문법 이후에 쉼표가 올 수 없음!
- 객체의 단축(shorthand) 문법
: 변수를 먼저 선언해 준 뒤, 선언한 변수를 객체 안에 넣을 수 있음!
- 객체를 분해함
- rest/spread 문법을 객체 분해에 적용할 수 있다
+ 속성들이 적용되는 모양새가 spread로 데이터를 뿌려놓고 그 다음에 작성한 정보를 새로 할당하는 모양새