
오류발생....
숫자가 입력된 문자열의 값 하나하나를 더하여 결과값을 출력하는 문제를 풀다 이상한 점을 발견했다. "123456789"는 숫자가 들어 있는 문자열이다. 문자열을 하나씩 forEach문으로 돌아가며 값을 더하여 값을 return하는 코드로 작성했다.
function solution(num_str) {
var answer = 0;
num_str.forEach((item)=>
answer += Number(item)
)
return answer
}
결과는 Uncaught TypeError: num_str.forEach is not a function at solution (<anonymous>:2:20) at <anonymous>:1:1 s라는 오류가 발생했다. 발생한 오류는 forEach가 함수가 아니라는 오류이다.
발생 원인은 코드가 forEach()배열 또는 배열과 유사한 객체가 아닌 값에 대해 메서드를 호출하려고 시도할 때 발생하는 오류이다. 그래서 입력한 값의 type을 알아보았다.
my_str = "123456789"
typeof(my_str) // string
forEach()은 object인 경우에 사용이 가능하는데 그걸 놓치고 있었다....
그럼 배열을 object로 바꾸기 위해서는 어떻게 해야될까?
my_str = "123456789"
typeof([...my_str]) // object
바로 전개 연산자를 사용하는 것이다. 전개 연산자를 통해 함수의 인자값으로 배열의 원소를 사용하여 계산하는 코드를 작성했다.
function solution(num_str) {
var answer = 0;
[...num_str].forEach((item)=>
answer += Number(item)
)
return answer
}
전개 연산자로 바꾸고 제출하니 통과!!!
오류가 발생한 원인
Object인 경우에 forEach()문을 사용해야 하는데 String일 때 사용했다...
그래서 어떻게 고쳤을까?
String을 전개 연산자를 사용해서 Object로 변경하기!