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]
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]