...
JS에서 함수에 넘겨주는 인수의 갯수 제한 → 없음
인수 갯수 정해놓고 함수 만들어도
→ 호출할 시 갯수 맞출 필요 x
아무것도 전달하지 않아도
error
발생 x예시 코드
function showName(name){
console.log(name)
}
showName('Tom') // 'Tom'
showName('Tom', 'Mike') // 'Tom' (인수 갯수: 제한 x & 맞출 필요 x)
showName() // undefined (아무것도 전달 안해도 o)
arguments
로 접근
나머지 매개변수
함수로 넘어 온 모든 인수에 접근 가능
함수 내에서 이용 가능한 지역 변수
Array
형태의 객체
length
/ index
有
배열의 내장 메서드 無
(forEach
, map
)
예시 코드
function showName(name){
console.log(arguments.length) // 2
console.log(arguments[0]) // 'Mike'
console.log(arguments[1]) // 'Tom'
}
showName('Mike', 'Tom')
함수가 정해지지 않은 수의 매개변수를 배열로 받을 수 있게 함.
ES6 사용 가능한 환경이면 → 가급적 ‘나머지 매개변수’ 사용 권장
사용법
...배열명
배열명
안에 전달된 인수들이 들어감
아무것도 전달하지 않으면
→ 빈 배열 ([]
)이 나타남
배열 메소드 사용 가능
주의 : 항상 마지막 위치에 있어야 함.
예시 코드
// [기본 예제]
function showName(...names){
console.log(names)
}
showName() // []
showName('Mike') // [ 'Mike' ]
showName('Mike', 'Tom') // [ 'Mike', 'Tom' ]
// [예제 2] 전달 받은 모든 수를 더하기
function add(...numbers){
// 방법 1. forEach 활용
let result = 0;
numbers.forEach((number)=> result += number)
console.log(result)
// 방법 2. reduce 활용
console.log(numbers.reduce((prev, cur)=>prev+cur))
}
add(1,2,3) // 6
add(1,2,3,4,5,6,7,8,9,10) // 55
// [예제 3] user 객체를 만들어주는 생성자 함수 만들기
function User(name, age, ...skills){
this.name = name;
this.age = age;
this.skills = skills;
}
const user1 = new User('Mike', 30, 'html', 'css')
const user2 = new User('Tom', 20, 'JS', 'React')
const user3 = new User('Jane', 10, 'English')
console.log(user1)
// User {
// name: 'Mike',
// age: 30,
// skills: [ 'html', 'css' ],
// __proto__: { constructor: ƒ User() }
// }
console.log(user2)
// User {
// name: 'Tom',
// age: 20,
// skills: [ 'JS', 'React' ],
// __proto__: { constructor: ƒ User() }
// }
console.log(user3)
// User {
// name: 'Jane',
// age: 10,
// skills: [ 'English' ],
// __proto__: { constructor: ƒ User() }
// }
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let result1 = [...arr1, ...arr2]
// ...arr1은 '1, 2, 3'을 풀어서 쓴 것
// ...arr2은 '4, 5, 6'을 풀어서 쓴 것
console.log(result1) // [ 1, 2, 3, 4, 5, 6 ]
// 중간에 사용 가능
let result2 = [0, ...arr1, ...arr2, 7,8,9]
console.log(result2) // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
let user = {name: 'Mike'}
let mike = {...user, age: 30}
console.log(mike) // { name: 'Mike', age: 30 }
let arr = [1,2,3]
let arr2 = [...arr] // [ 1, 2, 3 ]
let user = {name: 'Mike', age: 30}
let user2 = {...user} // { name: 'Mike', age: 30 }
user2.name = "Tom"
console.log(user.name) // 'Mike'
console.log(user2.name) // 'Tom'
// [ 예시 1 ] arr1을 [ 4, 5, 6, 1, 2, 3 ]으로
let arr1 = [1,2,3]
let arr2 = [4,5,6]
// [방법 1] 전개구문 x
arr2.reverse().forEach(num=>arr1.unshift(num))
// [방법 2] 전개구문 활용
arr1 = [...arr2, ...arr1];
console.log(arr1) // [ 4, 5, 6, 1, 2, 3 ]
// [ 예시 2 ] user에 info 넣고 fe, lang을 skill로 만들어서 넣기
let user = {name: "Mike"};
let info = {age: 30};
let fe = ["JS", "React"];
let lang = ["Korean", "English"];
// [방법 1] 전개 구문 없이
user = Object.assign({},user,info,{
skills: []
})
fe.forEach(item => user.skills.push(item))
lang.forEach(item => user.skills.push(item))
// [방법 2] 전개 구문
user = {
...user,
...info,
skills : [...fe, ...lang],
}
console.log(user)
// {
// name: 'Mike',
// age: 30,
// skills: [ 'JS', 'React', 'Korean', 'English' ]
// }
참고