[JS ES6] Spread / rest(Part 2. 1-5강)

ByeolGyu·2024년 8월 18일

JavaScript

목록 보기
14/17

✔ default parameter/arguments (1강)

default parameter

함수를 만들 때 파라미터값을 적지 않을 때
파라미터에 기본값(default 값)을 줄 수 있음

function hap(a, b = 10){ // b자리에 아무것도 없으면 default : 10
  console.log(a+b)
}
hap(1); // b파라미터가 10을 가져고 11 출력
hap(1, 2); // 3출력

function hap2(a, b = 100*a){ // default에 연산도 사용가능
  console.log(a+b)
}
hap2(1); // 101출력



function re(){
  return 500;
}
function hap3(a, b = re()){ // default에 함수도 사용가능
  console.log(a+b)
}
hap3(1); // 501출력

함수의 arguments

함수의 모든 파라미터들을 전부 한꺼번에 싸잡아서 다루고 싶은 경우 arguments 키워드를 활용

function func(a,b,c){
  console.log(arguments)
  console.log(...arguments); // 2 3 4
}

func(2,3,4);

콘솔창에 [2,3,4]를 담은 array 비슷한 자료가 출력됨

  • arguments는 모든 입력된 파라미터를 [ ] 안에 감싸는 키워드
function func(a,b,c){
  for (var i = 0; i < arguments.length; i++){
    console.log(arguments[i])
  }
}

func(2,3,4);
// 2
// 3
// 4

✔ Rest 파라미터 (2강)

Rest 파라미터

: rest 파라미터는 그 자리에 오는 모든 파라미터를 [ ]중괄호로 감싸준 파라미터

function func2(...restParams){
  console.log(restParams)
  for(let i=0; i<restParams.length; i++){
    console.log(restParams[i])
  }
}
func2(3, 4, 5)

뒤에 나오는 모든 파라미터 rest

function func3(a, b, ...restParams2){
  console.log(restParams2)
  for(let i=0; i<restParams2.length; i++){
    console.log(restParams2[i])
  }
}
func3(1, 2, 3, 4, 5, 6, 7);

  • 처음 두개의 파라미터는 a, b로 사용하고 그 뒤에 나오는 모든 파라미터는 중괄호에 감싸서 restParams2라는 array가 됨

rest 파라미터 주의사항

  1. 파라미터가 여러 개면 rest는 항상 마지막 파라미터로 넣어야 함
function func(a, ...rest, b){
  console.log(rest)
} // error
  1. rest파라미터는 두 개 이상 사용 불가
function 함수2(a, ...파라미터들, ...파라미터들2){
  console.log(파라미터들)
}

✔ spread, rest 파라미터 예제 (3-4강)

// 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 func(a=5, b = a*2){
  console.log(a+b); // 9
  return 10
}
func(3)

// 4번
function func2(a=5, b=a*2){
  console.log(a+b); // 15
}
func(undefined, undefined);

// 5번
function arr(...rest){
  return rest
}
var newArray = arr(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 max(numbers){
  console.log(Math.max(...numbers));

}
max(numbers);

// 7
function sorttt(letter){
  console.log([...letter].sort().join('')); //aber 
  console.log(...[...letter].sort()); //a b e r 
}  
sorttt('bear');

// 8번
function cnt(letter){
  findcnt = [...letter]; 
  var result = {}

  findcnt.forEach((char)=>{
    if(result[char] > 0){
      result[char] = result[char]+1;
    } else {
      result[char] = 1;
    }
  });

  console.log(result); // {a: 2, b: 2, c: 2, d: 7, f: 2}

}
cnt('aabbccdddddddff')

✔ Reference data type (5강)

Primitive data type

: 자료 자체가 변수에 저장되는 자료들

  • 문자, 숫자 자료형
var name = 'john';
var age = 20;

Reference data type

: 자료를 변수에 직접 저장하는게 아닌, 자료를 가르키는 화살표 (레퍼런스)를 변수에 저장

  • Array, Object 자료
var 사람 = { name : 'Kim' };
  • 변수에 저장된건 { name : 'Kim' }가 아니라 { name : 'Kim' } 값을 가리키는 화살표가 저장

예제

		var name1 = '김'
        var name2 = name1;
        name1 = '박'
        
        console.log(name1); //박
        console.log(name2); // 김


        var name3 = {name : '김'}
        console.log(name3.name); // 김

        var name4 = name3;
        name3.name='박'
        console.log(name3.name); // 박
        console.log(name4.name); // 박


        var name5 = {name : '김'}
        var name6 = {name : '김'}
        console.log(name5 == name6) // obj를 새로 할달 받았기 때문에false

        var name7 = {name : '김'}
        function change(obj){
            obj.name = 'Park'
        }
        change(name7);
        console.log(name7.name) // Park


        var name8 = {name : '김'}
        function chan(obj){
            obj = {name : 'park'} // 새로운 변수를 만든 것임, 파라미터 변수 (var obj와 같은 것)
            console.log(obj.name); // park
        }
        chan(name8)
        console.log(name8.name); // 김
profile
ByeolGyu

0개의 댓글