다른 언어들은 만약 파라미터 개수만큼 인자를 안 넣어주면 에러가 발생하지만 JS는 에러 안뜸.
function 더하기(a, b){
console.log(a)
}
더하기(1) //1
------------
function 더하기(a, b){
console.log(a + b)
}
더하기(1) //NaN
원래는 b 인자 없을 때 조건문 이용해서 디폴트 값을 줄 수 있지만 ES6에서는 파라미터에 그 값을 지정할 수 있다.
function 더하기(a, b = 10){
console.log(a + b)
}
더하기(1)
(a, b = 2 * 5) //수학 연산자도 가능
(a, b = 2 * a) //이런것도 가능.
function 함수(){
return 10
}
(a, b = 함수())// 함수도 가능.
🧨 주의할 점:디폴트 파라미터는 매개변수 수 만큼 인자가 안들어 갔을 때 실행된다.
function 함수(a,b,c){
for(var i =0; i< arguments.length; i++){
console.log(arguments[i])
} // 이런식으로 쓸 수도 있고.
console.log(arguments);
}
함수(1,2,3)
// 매개변수 순서대로의 키가 부여된 객체로 한꺼번에 나옴.
... 의 의미
1) 전개연산자
2) Rest 파라미터
function 함수2(...rest){
console.log(rest) //rest는 작명 아무거나 가능
};
함수2(1,2,3,4,5,)//[1, 2, 3, 4, 5]
장점
function 함수2(a, b,...rest){
console.log(a,b) // 1 2
console.log(rest)
};
함수2(1,2,3,4,5,) //[3, 4, 5]
함수의 매개변수 자리에 쓰이는 . . . 은 무조건 rest고 이외의 경우는 전개연산자로 보면 된다.
🧨 레스트 파라미터는 가장 뒤에 써야 함
1)
var a = [1,2,3];
var b = '김밥';
var c = [...b, ...a];
console.log(c); // ["김", "밥", 1, 2, 3]
2)
var a = [1,2,3];
var b = ['you', 'are'];
var c = function(a,b){
console.log( [[...a], ...[...b]][1] )
}
c(a,b); // "you"
3)
function 함수(a = 5, b = a * 2 ){
console.log(a + b); // 3 + 6
return 10
}
함수(3);
4)
function 함수(a = 5, b = a * 2 ){
console.log(a + b); // 15
}
함수(undefined, undefined);
인자에 아무것도 안들어갔으니까 디폴트 파라미터 ㄱ ㄱ됨
5)
function 어레이(...rest){
return rest
}
var newArray = 어레이(1,2,3,4,5);
console.log(newArray); //[1, 2, 3, 4, 5]
6)
var numbers = [2,3,4,5,6,1,3,2,5,5,4,6,7];
function 최대값(...rest){
console.log(Math.max(...rest));
//배열을 전개연산자로 풀어줘야 Math.max()가 잘 작동
}
최대값(...numbers)
7) 스트링을 sort하기
function 정렬(string){
console.log([...string].sort());
}
정렬('bear')
7) 데이터 마이닝 기능
알파벳들의 출현 개수 세는 함수
글자세기('aacbb')라고 입력하면 콘솔창에
{ a : 2, b : 3, c : 1 } 뜨게.
나의 풀이
function 글자세기(string){
let 글자 = [...string];
//["a", "a", "c", "b", "b", "b"]
let result = {a:0, b:0, c:0};
for(let i =0; i<글자.length; i++){
if(Object.keys(result)[0] === 글자[i]){
result.a += 1;
}
if(Object.keys(result)[1] === 글자[i]){
result.b += 1;
}
if(Object.keys(result)[2] === 글자[i]){
result.c += 1;
}
}return result
}
console.log(글자세기('aacbbb'))
다른 풀이
function 글자세기(string){
var 결과 = {};
[...string].forEach((a)=>{
if(결과[a] > 0){
결과[a]++;
}else {
결과[a] = 1;
}
});
return 결과;
}
console.log(글자세기('aacbbb'))