const arr = [1, 2, 3];
// 배열의 arr요소 중에서 최대값을 구하기 위해 Math.max를 사용
// Math.max 메서드는 매개변수 개수를 확정할 수 없는 가변 인자 함수므로 숫자가 아닌
// 배열을 인수로 전달하면 오류 발생
const max = Math.max(arr); // -> NaN
// 배열을 펼쳐서 요소들의 목록을 함수의 인자로 전달하고 싶은 경우 Function.prototype.apply 사용
var max2 = MAth.max.apply(null, arr);
// 스프레드 문법사용
// Math.max(...[1,2,3]) -> Math.max(1,2,3)와 같음
const max3 = Math.max(...arr);
// Rest 파라미터는 인수들의 목록을 배열로 전달 받음
function foo(..rest) {
console.log(rest); // 1, 2, 3 -> [1, 2, 3]
}
// 스프레드 문법은 배열과 같은 이터러블을 펼쳐 목록으로 만듬
foo(...[1, 2, 3]); // [1, 2, 3] -> 1, 2, 3
// ES5
var arr = [1,2].concat([3,4]);
console.log(arr); // [1,2,3,4]
// ES6
var arr = [...[1,2], ...[3,4]];
console.log(arr); // [1,2,3,4]
// ES5
var arr1 = [1,4];
var arr2 = [2,3];
// 세 번째 인수 arr2를 해체하여 전달 해야 -> [1,2,3,4]
// 그렇지 않으면 arr1에 arr2 배열 자체가 추가
arr1.splice(1, 0, arr2);
console.log(arr1); // [1, [2,3], 4]
var arr3 = [1,4];
var arr4 = [2,3];
// apply 메서드의 2번째 인수(배열)은 apply 메서드가 호출한 splice 메서드의 인수 목록
// arr[1]부터 0개의 요소를 제거하고 그 자리에 (arr[1])에 새로운 요소 (2,3)삽입
Array.prototype.splice.apply(arr3, [1, 0].concat(arr4));
console.log(arr3); // [1,2,3,4]
// ES6
const arr5 = [1,4];
const arr6 = [2,3];
arr5.aplice(1, 0, ...arr6);
console.log(arr5); // [1, 2, 3, 4]
// ES5
var origin = [1, 2];
var copy = origin.slice();
console.log(copy); // [1, 2]
console.log(copy === origin); // false
// ES6
const origin = [1, 2];
const copy = [...origin];
console.log(copy); // [1, 2]
console.log(copy === origin); // false
// ES5
function sum() {
// 이터러블이면서 유사 배열 객체인 arguments를 배열로 변환
var args = Array.prototype.slice.call(arguments);
return args.reduce(function (pre, cur) {
return pre + cur;
},0 );
}
console.log(sum(1, 2, 3)); // 6
// 이터러블이 아닌 유사 배열 객체
const arrayLike = {
0: 1,
1: 2,
2: 3,
length: 3
};
const arr = Array.prototype.slice.call(arrayLike); // [1,2,3]
console.log(arr.isArray(arr)); // true
// ES6
// 스프레드 문법 사용
function sum() {
return [...arguments].reduce((pre, cur) => pre + cur, 0);
}
console.log(sum(1, 2, 3)); // 6
// Rest 파라미터 사용
const sum = (...arg) => arg.reduce((pre, cur) => pre+cur, 0);
console.log(sum(1, 2, 3)); // 6
const arrayLike = {
0: 1,
1: 2,
2: 3,
length: 3
};
const arr = [..arrayLike]; // TypeError: object is not iterable
// Array.from은 유사 배열 객체 또는 이터러블을 배열로 변환
Array.from(arrayLike); // [1, 2, 3]
const obj = { x: 1, y: 2 };
const copy = { ...obj };
console.log(obj); // { x: 1, y: 2 }
console.log(obj === copy); // false
// 객체 병합
const merged = { x: 1, y: 2, ...{ a: 3, b: 4 }};
console.log(merged); // { x: 1, y: 2, a: 3, b: 4 }
// 객체 병합
// 프로퍼티가 중복되는 경우 뒤에 위치한 프로퍼티가 우선권을 갖음
const merged = Object.assign({}, { x: 1, y: 2, { y: 10, z: 3 });
console.log(merged); // { x: 1, y: 10, z: 3 }
// 특정 프로퍼티 변경
const changed = Object.assign({}, { x: 1, y: 2 }, { y: 100});
console.log(changed); // {x: 1, y: 100 }
// 프로퍼티 추가
const added = Object.assign({}, { x: 1, y: 2 }, { z: 0});
console.log(merged); // { x: 1, y: 2, z: 0 }
// 프로퍼티가 중복되는 경우 뒤에 위치한 프로퍼티가 우선권을 갖음
const merged = { ...{ x: 1, y: 2 }, ...{ y: 10, z: 3} };
console.log(merged); // {x: 1, y: 10, z: 3}
// 특정 프로프터 변경
const changed = { ...{ x: 1, y: 2} , y: 100} };
console.log(changed); // {x: 1, y: 100 }
// 프로퍼티 추가
const added = {...{ x: 1, y: 2 }, z: 0 };
// const added = {...{ x: 1, y: 2 }, ...{ z: 0 } };
console.log(merged); // { x: 1, y: 2, z: 0 }
📖 참고도서 : 모던 자바스크립트 Deep Dive 자바스크립트의 기본 개념과 동작 원리 / 이웅모 저 | 위키북스