| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
| 구분 | constructor | prototype | super | arguments |
|---|---|---|---|---|
| 일반함수 | O | O | X | O |
| 메서드 | X | X | O | O |
| 화살표 함수 | X | X | X | X |
ES6 메서드는 자신을 바인딩한 객체를 가리키는 내부 슬롯 HomeObject를 갖으므로 super 키워드를 사용할 수 있다.
Array.of : 전달된 인수를 요소로 갖는 배열 생성, Array() 생성자 함수랑 다르게 전달된 인수가 1개이고 숫자이더라도 인수를 요소로 갖는 배열 생성
Array.of(1, 2, 3) // [1, 2, 3]Array.from : 유사 배열 객체/이터러블 객체를 인수로 전달받아 배열로 변환하여 반환
Array.from({length:2, 0: 'a', 1:'b'}); // ['a','b']
Array.from('hello'); // ['h','e','l','l','o']
Array.from({length:2}); // [undefined, undefined]
Array.from({length:2}, (item, index) => index); // [0, 1]배열은 프로퍼티를 가질 수 있으며, 프로퍼티는 length에 영향을 주지 않는다.
배열에는 원본 배열(배열 메서드를 호출한 배열인 배열 메서드의 구현체 내부에서 this가 가리키는 객체)을 직접 변경하는 메서드와 원본 배열을 직접 변경하지 않고 새로운 배열을 생성하여 반환하는 메서드가 있다.
Array.isArray : 전달된 인수가 배열이면 true, 아니면 false
Array.prototype
원본 배열 변경
*.indexOf(item) : 존재하는지 확인(첫번째로 검색된 인덱스 반환, 없으면 -1)
// true가 나와야 한다.
[NaN].indexOf(NaN) !== -1; // false*.includes(item, start) : 존재하는지 확인(booelan)
[NaN].includes(NaN); // true*.push(item) : 성능이 좋지 않음, 마지막 요소로 추가하고 length 프로퍼티 값 반환
*.pop() : 마지막 요소를 제거하고 요소 반환
*.unshift(item) : 첫번째 요소로 추가하고 length 프로퍼티 값 반환
*.shift() : 첫번째 요소를 제거하고 요소 반환
*.splice(start, deleteCount, items) : 원본 배열을 직접 변경
*.reverse() : 원본 배열의 순서를 반대로 뒤집는다.
*.fill(item, start, end) : 인수로 전달받은 값을 배열의 처음부터 끝까지 요소로 채운다.
원본 배열 변경 안됨
[1, [2, [3, [4]]]].flat(2); // [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat().flat(); // [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat(Infinity); // [1, 2, 3, 4]고차 함수 : 가변 데이터를 피하고 불변성을 지향하는 함수평 프로그래밍에 기반을 두고 있다. 함수형 프로그래밍은 순수 함수와 보조 함수의 조합을 통해 로직 내의 조건문과 반복문을 제거하여 복잡성을 해결, 변수 사용을 억제하여 상태 변경을 피한다. 즉 순수 함수를 통해 부수 효과를 최대한 억제하여 프로그램 안정성을 높이기 위함이다.
원본 배열 변경
const todos = [
{ id: 4, content: 'JavaScript' },
{ id: 1, content: 'HTML' },
{ id: 2, content: 'CSS' }
];
// 비교 함수. 매개변수 key는 프로퍼티 키다.
function compare(key) {
// 프로퍼티 값이 문자열인 경우 - 산술 연산으로 비교하면 NaN이 나오므로 비교 연산을 사용한다.
// 비교 함수는 양수/음수/0을 반환하면 되므로 - 산술 연산 대신 비교 연산을 사용할 수 있다.
return (a, b) => (a[key] > b[key] ? 1 : (a[key] < b[key] ? -1 : 0));
}
// id를 기준으로 오름차순 정렬
todos.sort(compare('id'));
console.log(todos);
/*
[
{ id: 1, content: 'HTML' },
{ id: 2, content: 'CSS' },
{ id: 4, content: 'JavaScript' }
]
*/
// content를 기준으로 오름차순 정렬
todos.sort(compare('content'));
console.log(todos);
/*
[
{ id: 2, content: 'CSS' },
{ id: 1, content: 'HTML' },
{ id: 4, content: 'JavaScript' }
]
*/원본 배열 변경 안됨
const arr = ['hello', 'world'];
// flatMap은 1단계만 평탄화한다.
arr.flatMap((str, index) => [index, [str, str.length]]);
// -> [[0, ['hello', 5]], [1, ['world', 5]]] => [0, ['hello', 5], 1, ['world', 5]]
// 평탄화 깊이를 지정해야 하면 flatMap 메서드를 사용하지 말고 map 메서드와 flat 메서드를 각각 호출한다.
arr.map((str, index) => [index, [str, str.length]]).flat(2);
// -> [[0, ['hello', 5]], [1, ['world', 5]]] => [0, 'hello', 5, 1, 'world', 5]Number
프로퍼티
function isEqual(a, b){
// a와 b를 뺀 값의 절대값이 Number.EPSILON보다 작으면 같은 수로 인정한다.
return Math.abs(a - b) < Number.EPSILON;
}
isEqual(0.1 + 0.2, 0.3); // -> true메서드 : 대상을 암묵적 타입 변환하지 않는다.
(77.1234).toExponential(); // -> "7.71234e+1"
(77.1234).toExponential(4); // -> "7.7123e+1"
(77.1234).toExponential(2); // -> "7.71e+1"
77.toExponential(); // -> SyntaxError: Invalid or unexpected token
77.1234.toExponential(); // -> "7.71234e+1"
77 .toExponential(); // -> "7.7e+1"// 소수점 이하 반올림. 인수를 생략하면 기본값 0이 지정된다.
(12345.6789).toFixed(); // -> "12346"
// 소수점 이하 1자리수 유효, 나머지 반올림
(12345.6789).toFixed(1); // -> "12345.7"
// 소수점 이하 2자리수 유효, 나머지 반올림
(12345.6789).toFixed(2); // -> "12345.68"
// 소수점 이하 3자리수 유효, 나머지 반올림
(12345.6789).toFixed(3); // -> "12345.679"// 전체 자리수 유효. 인수를 전달하지 않으면 기본값 0이 전달된다.
(12345.6789).toPrecision(); // -> "12345.6789"
// 전체 1자리수 유효, 나머지 반올림
(12345.6789).toPrecision(1); // -> "1e+4"
// 전체 2자리수 유효, 나머지 반올림
(12345.6789).toPrecision(2); // -> "1.2e+4"
// 전체 6자리수 유효, 나머지 반올림
(12345.6789).toPrecision(6); // -> "12345.7"// 인수를 생략하면 10진수 문자열을 반환한다.
(10).toString(); // -> "10"
// 2진수 문자열을 반환한다.
(16).toString(2); // -> "10000"
// 8진수 문자열을 반환한다.
(16).toString(8); // -> "20"
// 16진수 문자열을 반환한다.
(16).toString(16); // -> "10"Math
프로퍼티
메서드
Math.random(); // 0에서 1 미만의 랜덤 실수(0.8208720231391746)
/*
1에서 10 범위의 랜덤 정수 취득
1) Math.random으로 0에서 1 미만의 랜덤 실수를 구한 다음, 10을 곱해 0에서 10 미만의
랜덤 실수를 구한다.
2) 0에서 10 미만의 랜덤 실수에 1을 더해 1에서 10 범위의 랜덤 실수를 구한다.
3) Math.floor로 1에서 10 범위의 랜덤 실수의 소수점 이하를 떼어 버린 다음 정수를 반환한다.
*/
const random = Math.floor((Math.random() * 10) + 1);
console.log(random); // 1에서 10 범위의 정수Math.pow(2, 8); // -> 256
Math.pow(2, -1); // -> 0.5
Math.pow(2); // -> NaN
// ES7 지수 연산자
2 ** 2 ** 2; // -> 16
Math.pow(Math.pow(2, 2), 2); // -> 16Math.max(1); // -> 1
Math.max(1, 2); // -> 2
Math.max(1, 2, 3); // -> 3
Math.max(); // -> -Infinity
// 배열 요소 중에서 최대값 취득
Math.max.apply(null, [1, 2, 3]); // -> 3
// ES6 스프레드 문법
Math.max(...[1, 2, 3]); // -> 3Math.min(1); // -> 1
Math.min(1, 2); // -> 1
Math.min(1, 2, 3); // -> 1
Math.min(); // -> Infinity
// 배열 요소 중에서 최소값 취득
Math.min.apply(null, [1, 2, 3]); // -> 1
// ES6 스프레드 문법
Math.min(...[1, 2, 3]); // -> 1| Back | FazBrowse Home | New Git URL |