코드스테이츠 프론트엔드

[SEB_FE] JavaScript Koans

애송이개발자 2023. 3. 18. 21:58

❓ JavaScript Koans란

 

Koans는 불교에서 유래된 단어로, 결론을 내리기 전에 이게 왜 맞는지 깊게 고민한다는 의미를 가지고 있다고 합니다.

JavaScript Koans는 부트캠프에서 하게 된 자바스크립트를 전체적으로 공부하고 되돌아보며 문제를 푸는 시스템입니다.



🙁 하면서 헷갈렸던 부분

 

Object.assign

const obj = {
      mastermind: "Joker",
      henchwoman: "Harley",
      relations: ["Anarky", "Duela Dent", "Lucy"],
      twins: {
        "Jared Leto": "Suicide Squad",
        "Joaquin Phoenix": "Joker",
        "Heath Ledger": "The Dark Knight",
        "Jack Nicholson": "Tim Burton Batman",
      },
    };

const copiedObj = Object.assign({}, obj);

delete obj.twins["Jared Leto"];
console.log("Jared Leto" in copiedObj.twins); // false

너무 간단하게 생각해서 copiedObj는 obj를 Object.assign으로 복사를 했기 때문에 둘이 다른 것이라고 판단해 obj에서 삭제해도 true가 나올 것이라고 생각했습니다.
하지만 결과는 false였습니다.

다시 생각해보니 Object.assign은 참조 자료형 내부에 있는 참조 자료형까지는 복사를 못하는 얕은 복사이기 때문에, copiedObj의 내부 객체인 twins와 obj의 twins와 주소가 동일해서 obj의 twins["Jared Leto"]를 삭제하면 copiedObj에서도 같이 삭제되어 false가 나오는 것입니다.


💡 새롭게 알게된 점

 

arguments

arguments는 자바스크립트 함수 내에서 사용되는 지역 변수입니다. 이 변수는 함수를 호출할 때 전달된 인자들을 배열 형태로 저장합니다. 이 배열은 함수 내에서 arguments라는 이름으로 사용됩니다.

function sum() {
  let result = 0;
  for (let i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}

sum(1, 2, 3); // 6
sum(1, 2, 3, 4, 5); // 15

이 함수는 호출할 때 전달된 모든 인자들의 합을 계산하여 반환합니다. 이때, arguments를 사용하여 함수가 호출될 때 전달된 모든 인자들을 합산할 수 있습니다.
따라서, arguments는 함수 내에서 가변적인 인자를 다루는 데 유용하게 사용됩니다.