Hi, There!
안녕하세요, 바오밥입니다.
목차
- 개요
- 본문
- Reference
개요
자바스크립트의 나머지 매개변수와 전개 구문에 대하여 공부하고 정리하였습니다.
본문
자바스크립트와 인수
자바스크립트의 인수 개수
자바스크립트는 인수의 개수의 영향을 받지 않습니다.
때문에 정의된 함수를 호출할 때 몇 개의 인수를 전달해도 오류가 발생하지 않습니다.
function showName(name) {
console.log(name);
}
showName('Mike'); // "Mike"
showName('Mike', 'Tom'); // "Mike"
showName(); // 아무것도 전달하지 않아도 undefined가 출력될 뿐 오류가 발생하지 않습니다.
자바스크립트에서 인수를 다루는 방법 (1) - arguments
- 함수로 넘어 온 모든 인수에 접근할 수 있습니다.
- 함수 내에서 이용 가능한 지역 변수입니다.
- 배열 행태의 객체로 length / index 를 이용할 수 있습니다.
그러나 배열의 내장 메서드는 갖고 있지 않습니다. (forEach, map 등)
function showName(name) {
console.log(arguments.length, arguments[0], arguments[1]);
}
showName('Mike', 'Tom'); // 2 "Mike" "Tom"
자바스크립트에서 인수를 다루는 방법 (2) - 나머지 매개변수(...)
나머지 매개 변수를 이용하면 전달된 인수들이 하나의 배열로 반환됩니다.
function showName(...names) {
console.log(names);
}
showName() // [], arguments와는 다르게 undefined 대신 빈 배열이 반환됩니다.
showName('Tom') // ["Tom"]
showName('Tom', 'Mike') // ["Tom", "Mike"]
나머지 매개변수를 활용하면 다음과 같이 매개 변수를 배열로 만들어 하나의 함수로 정의할 수 있습니다. (forEach)
function add(...nums) {
let result = 0;
nums.forEach(num => result += num)
console.log(result)
}
add(1,2,3); // 6
add(1,2,3,4,5,6,7,8,9,10); // 55
또는 아래처럼 정의할 수 있습니다. (reduce)
function add(...nums) {
let result = nums.reduce((prev, cur) => prev+cur);
console.log(result);
};
add(1,2,3,4,5) // 15
아래는 유저 객체를 만들어 주는 생성자 함수를 정의하는 코드입니다.
유저마다 가지고 있는 스킬은 1개가 아니라 n개일 수 있습니다.
아래와 같이 생성자 함수에 나머지 매개변수를 이용하면 손쉽게 객체 값을 배열로 저장할 수 있습니다.
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');
console.log(user1, user2);
/* user1과 user2의 결과 값
{
"name": "Mike",
"age": 30,
"skills": [
"html",
"css"
]
}
{
"name": "Tom",
"age": 20,
"skills": [
"js",
"React"
]
}
*/
전개 구문 배열 예제
전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 요소로 사용할 수 있습니다.
이를 적절히 이용하면 arr.push(), arr.splice(), arr.concat() 등을 대체할 수 있습니다.
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let result = [0, ...arr1, ...arr2, 7, 8, 9] // ...arr1 & ...arr2를 사용하였습니다.
console.log(result) // [0,1,2,3,4,5,6,7,8,9]
전개 구문 객체 예제
전개 구문은 배열뿐만 아니라 객체에도 동일하게 사용할 수 있습니다.
let user = {name:"Mike"}
let mike = {...user, age:30} // user 객체 사용
console.log(mike) // { "name": "Mike", "age": 30 }
객체 복제 메서드를 대체하여 사용할 수 있습니다.
let arr = [1,2,3]
let arr2 = [...arr] // arr를 그대로 복제
console.log(arr, arr2) // [1,2,3] [1,2,3]
전개 구문 객체와 전개 구문 배열을 활용하면 다음과 같이 손쉽게 코드를 작성할 수 있습니다.
- 유저의 이름, 나이, 기술(개발스택, 언어)을 하나의 객체로 만드시오.
let user = {name:"Mike"};
let info = {age:30}
let fe = ["JS", "React"]
let lang = ["Korean", "English"]
user = {
...user,
...info,
skills: [...fe, ...lang],
};
console.log(user)
만약, 전개 구문 객체 없이 구현하려면 다음과 같습니다.
- user 객체를 복제하여 이름, 나이, 기술을 담을 배열을 담은 객체를 생성합니다.
- fe, lang 배열을 순회하면서 skills 객체 배열에 요소를 추가합니다.
let user = {name:"Mike"};
let info = {age:30}
let fe = ["JS", "React"]
let lang = ["Korean", "English"]
user = Object.assign({}, user, info, {skills: []})
fe.forEach((item) => {
user.skills.push(item);
});
lang.forEach((item) => {
user.skills.push(item);
});
console.log(user)
Reference
'Tech > [Lang] JS & TS' 카테고리의 다른 글
스케쥴링 메서드 (setTimeout, setInterval) (0) | 2021.09.24 |
---|---|
클로저와 어휘적 환경 (0) | 2021.09.23 |
구조 분해 할당 (0) | 2021.09.16 |
배열 메서드 (2) (0) | 2021.09.14 |
배열 메서드 (1) (0) | 2021.09.13 |