[TIL] 깨달은 것

서영·2022년 10월 8일
0

TIL

목록 보기
1/2

💧바보같은 나에요

fe conf의 aaant 기업 부스에서 틀린 퀴즈를 리마인드 해보려고 한다.

const person = {name:"Sarah",age:21};

const change = (x={...person}) => {
    x.name = "Sarah";
    x.age += 1;
}
const changeAge = (x={...person})=>{
    x.name = "Lora"
    x.age += 1;
}
console.log(person);

위 코드를 실행하면 출력 결과가 어떻게 나올까?

바보같은 나는 Lora 23살 이라고 답했다.
이렇게 답한 이유는 person 객체를 인자로 직접 넘겼기 때문에 원본 객체의 데이터를 변경하지 않을까 라고 생각했기 때문이다.

하지만 정답은 { name: 'Sarah', age: 21 } 이다.

✏️ spread 문법은 기존의 것은 건드리지 않고 새로운 객체를 만들 때 사용한다.


// (1)
foo = 3;
console.log(foo?.());

// (2)
foo = null;
console.log(foo?.());

위 문제를 받고 아예 모르겠다고 대답했었다..
정답은 TypeErrorundefined 였다.

(1) foo는 var로 선언되었고 3이라는 number 값을 가진다. optional chaining은 null과 undefined에 대해 에러를 뱉지 않도록 한다. number는 이에 해당되지 않고, 함수도 아니므로 함수가 아니라는 TypeError가 출력된다. -> TypeError: foo is not a function

(2) null은 optional chaining에 걸리고, 함수 호출 시 foo는 함수가 아니므로 undefined를 출력한다.

profile
꾸준히 공부하기

0개의 댓글