1) AboutExpects.js
2) AboutArrays.js
let emptyArray = [];
expect(typeof emptyArray).toBe('object');
✅ 배열의 타입은 ‘object’
it('Array 메소드 slice를 확인합니다.', function () {
let array = ['peanut', 'butter', 'and', 'jelly'];
expect(array.slice(0, 1)).toEqual(['peanut']);
expect(array.slice(0, 2)).toEqual(['peanut', 'butter']);
expect(array.slice(2, 2)).toEqual([]);
expect(array.slice(2, 20)).toEqual(['and', 'jelly']);
expect(array.slice(3, 0)).toEqual([]);
expect(array.slice(3, 100)).toEqual(['jelly']);
expect(array.slice(5, 1)).toEqual([]);
});
✅ array 메서드 slice는 slice(index, index-1)
첫번째 인수는 index부터, 두번째 인수는 index전까지 무조건 index 기준!
그러므로 첫번째 인수보다 두번째 인수가 더 작으면 빈 배열 리턴
let array = ['zero', 'one', 'two', 'three', 'four', 'five'];
let copyOfArray = array.slice();
copyOfArray[3] = 'changed in copyOfArray';
expect(array[3]).toBe('three');
✅ 헷갈리지 않기!
let copyOfArray = array.slice(); 한 후에 copyOfArray[3]를 'changed in copyOfArray’로 한다고 하여 array[3]가 해당 값으로 바뀌는 것이 아닙니다.
slice() 메서드의 인수에 아무것도 넣지 않았기 때문에 아무것도 변하지 않은 상태로 변수에 할당됩니다. 그래서 copyOfArray[3]는 array[3]과 같습니다.
let array = [1, 2, 3];
let poppedValue = array.pop();
poppedValue = 3;
✅ 헷갈리지 않기!
array.pop()의 대상이 되는 것이 변수로 할당된다.
array.pop()의 값을 할당한 poppedValue 변수는 배열이 나오는 것이 아니라 해당 값만 나온다.
let array = [1, 2];
array.unshift(3);
expect(array).toEqual([3, 1, 2]);
let shiftedValue = array.shift();
expect(shiftedValue).toEqual(3);
expect(array).toEqual([1, 2]);
});
✅ array.shift()를 새로운 변수에 넣어도 기존 array 변수에 영향을 끼친다.
shift, unshift, push, pop 같은 경우 기존 배열의 요소를 제거하고 해당 요소를 반환.
mutable immutable 검색!
const arr = [];
const toBePushed = 42;
arr.push(toBePushed);
expect(arr).toEqual([42]);
const obj = { x: 1 };
delete obj.x;
expect(obj).toEqual({});
obj.toAchieve = 202050;
expect(obj).toEqual({ toAchieve: 202050 });
3) AboutSpreadSyntax.js
Rest Parameter
const spread = [42, 2, 1, 4, 2, 12];
const max = Math.max(...spread);
expect(max).toBe(42);
✅ 배열 중 가장 큰 수를 구할 수 있습니다.
Rest Parameter
const spread = [1970, 0, 1]; // 1 Jan 1970
const whenComputerStarts = new Date(...spread);
expect(whenComputerStarts).toEqual(new Date(1970, 0, 1));
✅ 생성자 함수에도 사용할 수 있습니다
4) AboutFunctions.js
(function () {
let variable = 'top-level';
function parentfunction() {
let variable = 'local';
function childfunction() {
return variable;
}
return childfunction();
}
expect(parentfunction()).toBe('local');
});
✅ scope chain 이해하기! 지역변수를 return하였습니다.
(function () {
function makeIncreaseByFunction(increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
}
const increaseBy3 = makeIncreaseByFunction(3);
const increaseBy5 = makeIncreaseByFunction(5);
expect(increaseBy3(10) + increaseBy5(10)).toBe(28);
});
✅ 첫번째 매개변수 increaseByAmount는 10, 두번째 매개변수 numberToIncrease는 3 또는 5입니다.
5) AboutObject.js
여기서 Array() 생성자 함수와 ' brain'이 다섯번이 아닌 왜 네번이 들어가는지 이해가 되질 않았다.
그래서 찾아봤더니
Array() 생성자 함수
Array() 생성자 함수는 매개변수의 개수에 따라 다르게 동작한다.
-매개변수가 1개이고 숫자인 경우 매개변수로 전달된 숫자를 length 값으로 가지는 빈 배열을 생성한다.
-그 외의 경우 매개변수로 전달된 값들을 요소로 가지는 배열을 생성한다.
['', '', '', '', ''] // length = 5인 빈 배열
✅ 즉, Array(5)일 경우
join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만든다.
이걸 보고 이해했다!