본문 바로가기
에러 디버깅 & 리팩토링

자바스크립트 배열 메서드 .pop(4), .shift(6)은 왜 정상작동하나

by growingTangerine 2022. 11. 3.

1. 현재의 무드: 해당 내용 또한 스터디 디코에서 다른 스터디원분이 질문해주신 내용! 흥미롭고 배운 점이 많아 정리해둡니다. 

2. 오늘 학습한 내용 중 키워드: 배열 메서드 .pop(), .shift(), 매개변수와 인자 

3. 오늘 학습한 내용 요약

 

let arr = [1, 2, 3, 4]

arr.pop() // 4
console.log (arr) // [1, 2, 3] 

arr.shift() // 1
console.log (arr) // [2, 3]

 

이처럼, .pop() 과 .shift() 는 각각 배열의 맨 마지막 요소 값과 맨 첫 요소 값을 제거해주는 역할을 합니다. 

 

그런데, 문제는

 

let arr = [1, 2, 3, 4]

arr.pop(6) // 4
console.log (arr) // [1, 2, 3] 

arr.shift(10) // 1
console.log (arr) // [2, 3]

 

이렇게, 소괄호 내에 제거하려는 값과 다른 값을 넣어도 정상적으로 메서드가 작동합니다.

 

왜 그럴까요? 

정답은, .pop()과 .shift() 메서드에서 인자 값을 요청하는 부분이 비어있기 때문입니다. 

즉, 요청한 매개변수가 아예 없기 때문에, 인자를 아무거나 집어넣어도 그 값은 무시됩니다. 

 

이것은 함수의 매개변수-전달인자를 생각하면 이해가 더 잘 되는데요! 

function plusNum (num, plus) { 
	return num + plus
} 

plusNum(1, 2) // 3

plusNum(1, 2, 3) // 3

 

위 코드처럼, (num, plus) 라는 두개의 매개변수만 가진 함수에 (1, 2, 3) 이라는 인자를 집어넣으면, 마지막 3 값은 무시됩니다. 

그래서 .pop(5), .shift(381) 도 정상 작동 되는 것입니다. 

 

참고로, 매개변수가 (num, plus) 인 함수에  (1) 만 집어넣으면, num = 1 로 들어가고, plus는 할당된 값이 없기 때문에 undefined로 판단하여 함수가 작동된다고 합니다.