일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- You are running `create-react-app` 5.0.0
- Til
- TypeScript
- 회고
- 구름톤
- create-react-app오류
- which is behind the latest release (5.0.1).
- Today
- Total
비전공 프론트엔드 개발자
CodeStates Kocans 를 통해 학습한 내용 정리 본문
let arr1 = [1,2,3]
arr1 === [1,2,3] // false
=> 참조 자료형은 값이 같아 보여도, 참조하고 있는 주소가 달라서 false 를 반환한다.
let arr2 = arr1
arr2 === arr1 //true
=> arr2 에 arr1 의 주소를 할당해 주었으니, 둘은 같은 주소를 바라보고 있다.
let num1 = [1,2,3]
let num2 = [1,2,3]
num1 === num2 // false
=> 값은 같아 보이나, 바라보는 주소가 다르다.
1 + true = 2 => 약간 놀라웠다.. NaN 이나 오류가 나올 줄 알았지만 true 는 1로 연산을 해준다...
1 + false = 1 => 위와 같이 연산해 준다면 false 는 0 이겠지..
function 의 타임은 'function'이다. 이제까지 왜 'object'라고 알고있었는지 모르겠다..
전역 변수로 함수 안에 지역변수를 전언하고 리턴으로 지역변수를 할 경우 지역변수를 리턴한다.
인자로 값을 받은 상황에서 => 인자를 쓸 곳이 없으면 무시된다.
클로저를 사용할 경우의 장점 => 원하는 내용을 숨길 수 있다.
이 코드는
function increaseBy(increaseByAmount, numberTolncrease){
return increaseByAmount + numberTolncrease
}
둘은 같은 결과를 리턴해 준다.
Object.key(객체이름) => 객체의 길이를 알고 싶을 때 사용한다.
** 여전히 헷갈리는 slice() 함수 **
slice() => 처음부터 끝까지 모든 값을 복사해 준다.
slice(5) => 6번째 인덱스 부터 마지막 인덱스까지 "새로운" 배열을 반환해 준다.
slice(5,9) => 배열의 5번째 인덱스 부터 8번째 인덱스까지 짤라서 "새로운"배열로 반환.
첫번째 값은 자신을 포함하고, 두번째 값은 자신을 포함하지 않는다.
slice(5,1) => [] 가 나온다. => 두개의 값을 받을 때 두번재 값이 작으면 빈 배열을 반환해준다.
객체에서
는 값을 적는게 아니라, Boolean 타입으로 적어야 한다.
let objExam = Object.assign({}, obj} => objExam 은 obj의 얕은 복사를 할당한다.
깊은 복사와 얕은 복사 두가지가 있는데
우리가 흔히 하는 ( obj2 = obj1 ) 는 깊은 복사에 해당하고,
얕은 복사는
let obj2 = Object.assign({}, obj} 를 했을 경우 obj2 의 값을 변경해도 obj1 에는 영향이 없다.
이렇게만 작동하면 참 좋겠지만 다음의 경우에는 얘기가 달라진다.
let obj = {
a: 1,
b: {
c: 2,
},
}
let newObj = Object.assign({}, obj);
console.log(newObj); // { a: 1, b: { c: 2} }
obj.a = 10;
console.log(obj); // { a: 10, b: { c: 2} }
console.log(newObj); // { a: 1, b: { c: 2} }
newObj.a = 20;
console.log(obj); // { a: 10, b: { c: 2} }
console.log(newObj); // { a: 20, b: { c: 2} }
newObj.b.c = 30;
console.log(obj); // { a: 10, b: { c: 30} }
console.log(newObj); // { a: 20, b: { c: 30} }
// Note: newObj.b.c = 30; Read why..
해당 코드의 경우 키가 b이고, 값이 c인 객체는 같은 주소를 바라보고 있다.
따라서 값이 변경되었음을 알 수 있다.
이처럼 Object.assign() 의 경우 객체안에 객체가 선언된 경우 의도한 값을 얻어내기 힘들 수 있다.
깊은 복사를 할 때에는 ** JSON.parse(JSON.stringify(객체이름)) 을 사용한다.
해당 내용은 아직 이해가 부족,,, 사용자 정의 매서드를 복사하는데 사용할 수 없다는데 이게 먼지 모르겠다...
게다가 실습하기도 애매하다,, 문법을 잘 모르니 자꾸 오류가 나온다,,
이건 좀 더 공부해보자.