-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
a에 값을 안 주었을 때 왜 object가 + 되서 나오는 걸까요?
19.09.12 15:06 작성 조회수 86
0
function sum(a = 0, b = { value: 0 }) {
return a + b.value;
}
sum(b = { value: 10 });
하면 결과가 10이 나올거라 예상했는데, "[object Object]10" 이 나오는데요. default parameter로 a = 0을 줬으면 a에 0이 세팅되어야 한다고 예상했는데 전혀 아닌데요...
답변을 작성해보세요.
1
James Jeon
2019.10.17
매개변수는 파라미터의 앞부분부터 순차적으로 전달되기 때문에 넘겨진 "b = { value: 10 }" 값은
b 파라미터가 아닌 a 파라미터로 전달되게 됩니다.
따라서 함수 내부에서 a를 출력해보시면, "{ value: 10}" Object가 전달된 것을 확인하실 수 있습니다.
이름을 명시해서 해당 값만 전달하고 싶으시다면, 정의를 조금 변경해서 사용해야 할 것 같습니다.
function sum({a = 0, b = { value: 0 }}) {
return a + b.value;
}
console.log(sum({b: { value: 10 }}));
이렇게 하면 "{ b: { value: 10 } }" Object를 파라미터로 전달하게 되는데,
"{ a = 0, b = { value: 0 } }" Object 파라미터에서 b 키에 값이 맵핑되어
해당 파라미터 값은 "{ a: 0, b: { value: 10 } }"이 됩니다. (a 키의 값은 Default 값에 의해 0)
그렇게 한다면, 의도하는 것과 같이 함수가 10을 반환합니다.
답변 1