💻/[과제]

[과제] JavaScript Koans

Mia_ 2022. 11. 7. 16:03

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로 데이터를 뿌려놓고 그 다음에 작성한 정보를 새로 할당하는 모양새

[예제1]
[예제2]