Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

비전공 프론트엔드 개발자

CodeStates Kocans 를 통해 학습한 내용 정리 본문

카테고리 없음

CodeStates Kocans 를 통해 학습한 내용 정리

JJ_hyun 2022. 5. 16. 14:45

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) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
}

이 코드는 

function increaseBy(increaseByAmount, numberTolncrease){

  return increaseByAmount + numberTolncrease

}

 

둘은 같은 결과를 리턴해 준다. 

 

Object.key(객체이름) => 객체의 길이를 알고 싶을 때 사용한다. 

 

** 여전히 헷갈리는 slice() 함수 **

 

slice() => 처음부터 끝까지 모든 값을 복사해 준다.

 

 slice(5) => 6번째 인덱스 부터 마지막 인덱스까지 "새로운" 배열을 반환해 준다. 

 

slice(5,9) => 배열의 5번째 인덱스 부터 8번째 인덱스까지 짤라서 "새로운"배열로 반환.

첫번째 값은 자신을 포함하고, 두번째 값은 자신을 포함하지 않는다. 

 

slice(5,1) => [] 가 나온다. => 두개의 값을 받을 때 두번재 값이 작으면 빈 배열을 반환해준다. 

 

객체에서

'secretary' in megalomaniac

 

 

는 값을 적는게 아니라, 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(객체이름)) 을 사용한다. 

해당 내용은 아직 이해가 부족,,, 사용자 정의 매서드를 복사하는데 사용할 수 없다는데 이게 먼지 모르겠다...

게다가 실습하기도 애매하다,, 문법을 잘 모르니 자꾸 오류가 나온다,, 

 

이건 좀 더 공부해보자.