Check Point 3 - Rest Parameter, Spread Operator

goodlana·2020년 4월 6일
0

JavaScript - CheckPoint

목록 보기
3/4

1번 문제

let x = 2;
let y = x;
y = 3; /// x === 2

y는 더이상 x의 주소를 참조하지 않을 뿐, x는 그대로 있음.

2번 문제

3번 문제

console.log('codestates' === 'codestates');
console.log(3.14 === 3.14);
console.log([1,2,3] === [1,2,3]);
console.log({ foo: 'bar' } === { foo: 'bar' }); 
// true ture false false


number, string 등은 === 입력 시 값이 같으면 같다고 나오나,
array, object 등의 타입은 아님...

4번 문제

let x = { foo: 3 };
let y = x;
y = 2; // x.foo === 2

y는 더이상 x의 주소를 참조하지 않을 뿐, x는 그대로 있음.

5번 문제

let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined; // myArray === [2,3,25,5]
  1. myArray와 ourArray의 주소는 같았음. 그래서 ourArray에 변화를 줘도 myArray가 변함.
  2. ourArray = undefined라고 지정한 이유는 undefined도 값이 복사가 된다.
  3. 따라서 myArray는 값이 변한 상태 그대로 있고, ourArray는 undefined로 남게됨.

6번 문제

let player = { score: 3 };
function doStuff(obj) { 
  obj.score = 2;
}

doStuff(player); // player.score === 2

obj를 건드려서
player가 바뀌어버림.

7번 문제

let score = 80;
function doStuff(value) {
  value = 90;
}

doStuff(score) // score === 80

value는 변수를 선언한 것과 마찬가지.
{}안에서 value=90으로 할당을 다시해버림
그 값 자체로 들어와버림. 주소가 없음
score는 여전히 80이 됨.

8번 문제

//new 용법 써서 arr 만드는 방법
let arr = new Array['code', 'states']
 === let arr=['code','states']

9번 문제

function printMaxNums(...args) {
  console.log(args)
}

printMaxNums(10, 30, 40) // [10, 30, 40]

10번 문제

function foo(...args) {
  return args.reduce(function(acc, curr) { 
    if (acc > curr) {
      return acc
    } else {
      return curr
    }
  })
}



let value = foo(10, 30, 40, 20) // value === 40

(...args)는 배열이라서 reduce 함수를 쓸 수 있음
여기서 ...역할은 rest parameter

11번 문제

let arr = [10, 30, 40, 20]
 let value = Math.max(arr) //value === NaN

Math함수는 인자 하나씩 넘겨야지, 배열로 넘기면(arr) 비교 대상이 아니게 됨.
따라서 NaN이 나오게 됨.

12번 & 13번 문제

//12번 문제
let arr = [10, 30, 40, 20]
 let value = Math.max(...arr) // value === 40

//13번 문제
let arr = [10, 30, 40, 20]
 let value = [...arr] // value === [10, 30, 40, 20]

(...arr)는 배열->인자의 형태로 만들어줌.
따라서 Math함수를 쓸 때, 인자가 하나씩 풀어져서 들어가는 것과 마찬가지임.

cf)
인자 -> 배열: rest parameters
배열 -> 인자: spread parameters

cf)아래 방식도 참고. 비교해서 알아놓기

14번 문제
배열 합치기 방식 두개

let arr = ['code', 'states']
let value = [
  ...arr,
  'pre',
  ...['course', 'student']
] // value === ["code", "states", "pre", "course", "student"]

아래 방식도 알아놓기.

arr1.concat(arr2) === [...arr1, ...arr2]
profile
Let's code like chord !

관심 있을 만한 포스트

0개의 댓글