new Date()를 통해 반환되는 인스턴스를 '타임스탬프'(Timestamp)라고 합니다.
const date = new Date()
console.log(date)
// 타임스탬프 - 'Wed Sep 28 2022 10:45:41 GMT+0900 (한국 표준시)'
console.log(typeof date) // 'object'
console.log(typeof 'Wed Sep 28 2022 10:45:41 GMT+0900 (한국 표준시)') // 'string'
const d1 = new Date(2022, 11, 16, 12, 57, 30)
console.log(d1) // 'Fri Dec 16 2022 12:57:30 GMT+0900 (한국 표준시)'
const d2 = new Date('Fri Dec 16 2022 12:57:30 GMT+0900 (한국 표준시)')
console.log(d2) // 'Fri Dec 16 2022 12:57:30 GMT+0900 (한국 표준시)'
.getFullYear()와 .setFullYear()
날짜 인스턴스의 '연도'를 반환하거나 지정합니다.
const date = new Date()
console.log(date.getFullYear()) // 2022
date.setFullYear(2023)
console.log(date.getFullYear()) // 2023
console.log(date) // 'Thu Sep 28 2023 14:23:23 GMT+0900 (한국 표준시)'
.getMonth()와 .setMonth()
날짜 인스턴스의 '월'을 반환하거나 지정합니다.
0부터 시작(Zero-based numbering)합니다.
const date = new Date()
console.log(date.getMonth()) // 8
console.log(date) // 'Wed Sep 28 2022 15:26:49 GMT+0900 (한국 표준시)'
date.setMonth(0)
console.log(date.getMonth()) // 0
console.log(date) // 'Fri Jan 28 2022 14:26:33 GMT+0900 (한국 표준시)'
.getDate()와 .setDate()
날짜 인스턴스의 '일'을 반환하거나 지정합니다.
const date = new Date()
console.log(date.getDate()) // 28
console.log(date) // 'Wed Sep 28 2022 15:35:14 GMT+0900 (한국 표준시)'
date.setDate(11)
console.log(date.getDate()) // 11
console.log(date) // 'Mon Sep 11 2022 12:03:40 GMT+0900 (한국 표준시)'
.getHours()와 .setHours()
날짜 인스턴스의 '시간'을 반환하거나 지정합니다.
const date = new Date()
console.log(date.getHours()) // 14
console.log(date) // 'Wed Dec 21 2022 14:23:51 GMT+0900 (한국 표준시)'
date.setHours(7)
console.log(date.getHours()) // 7
console.log(date) // 'Wed Dec 21 2022 07:23:51 GMT+0900 (한국 표준시)'
.getMinutes()와 .setMinutes()
날짜 인스턴스의 '분'을 반환하거나 지정합니다.
const date = new Date()
console.log(date.getMinutes()) // 47
console.log(date) // 'Wed Sep 28 2022 15:47:33 GMT+0900 (한국 표준시)'
date.setMinutes(2)
console.log(date.getMinutes()) // 2
console.log(date) // 'Wed Sep 28 2022 15:02:33 GMT+0900 (한국 표준시)'
.getSeconds()와 .setSeconds()
날짜 인스턴스의 '초'를 반환하거나 지정합니다.
const date = new Date()
console.log(date.getSeconds()) // 13
console.log(date) // 'Wed Sep 28 2022 15:50:13 GMT+0900 (한국 표준시)'
date.setSeconds(57)
console.log(date.getSeconds()) // 57
console.log(date) // 'Wed Sep 28 2022 15:50:57 GMT+0900 (한국 표준시)'
.getDay()
날짜 인스턴스의 '요일'을 반환합니다.
const date = new Date()
const day = date.getDay()
console.log(day) // 3
console.log(getDayKo(day)) // '수요일'
function getDayKo(day) {
switch (day) {
case 0: return '일요일'
case 1: return '월요일'
case 2: return '화요일'
case 3: return '수요일'
case 4: return '목요일'
case 5: return '금요일'
case 6: return '토요일'
}
}
.getTime()와 .setTime()
유닉스 타임(UNIX Time)으로부터 날짜 인스턴스의 경과한 시간을 '밀리초(ms)'로 반환하거나 지정합니다.
유닉스 타임이란 1970.01.01 00:00:00 시간을 의미합니다.
const date = new Date()
console.log(date.getTime()) // 1664343325817
console.log(date) // 'Wed Sep 28 2022 15:58:05 GMT+0900 (한국 표준시)'
date.setTime(1700000000000)
console.log(date.getTime()) // 1700000000000
console.log(date) // 'Wed Nov 15 2023 07:13:20 GMT+0900 (한국 표준시)'
Date.prototype.isAfter = function (date) {
const a = this.getTime()
const b = date.getTime()
return a > b
}
const d1 = new Date('Sat Jan 01 2022 00:00:00 GMT+0900 (한국 표준시)')
const d2 = new Date('Sun Jan 01 2023 00:00:00 GMT+0900 (한국 표준시)')
console.log(d1.isAfter(d2)) // false
console.log(d2.isAfter(d1)) // true
.toUTCString()
날짜 인스턴스의 협정 세계시(UTC)를 반환합니다.
협정 세계시(UTC) 혹은 그리니치 평균시(GMT)는 영국 런던 기점의 기준시입니다.
한국은 UTC 기준보다 9시간 빠릅니다.
console.log(new Date())
// Tue Oct 25 2022 16:29:54 GMT+0900 (한국 표준시)
console.log(new Date().toUTCString())
// Tue, 25 Oct 2022 07:29:54 GMT
.toISOString()
날짜 인스턴스의 협정 세계시(UTC)를 'ISO 8601' 포맷으로 반환합니다.
'ISO 8601'는 날짜와 시간을 표현하는 국제 표준 규격입니다.
console.log(new Date())
// Tue Oct 25 2022 16:29:54 GMT+0900 (한국 표준시)
console.log(new Date().toISOString())
// 2022-10-25T07:29:54.000Z
Date.now()
유닉스 타임(UNIX Time)으로부터 메소드가 호출될 때의 경과한 시간을 '밀리초(ms)'로 반환합니다.
const time = new Date().getTime()
console.log(Date.now()) // 1664349597861
console.log(time) // 1664349597861
setTimeout(() => {
console.log(Date.now()) // 1664349598861
console.log(time) // 1664349597861
}, 1000)
// 현재 시간을 기준, 서로 같음!
new Date().getTime()
Date.now()
// getTime 메소드는 특정 날짜(시간)의 경과 시간을 확인 가능!
new Date('Sat Jan 01 2022 00:00:00 GMT+0900 (한국 표준시)').getTime()
Date.now()
Array
.length
배열의 길이(숫자)를 반환합니다.
const arr = ['A', 'B', 'C']
console.log(arr.length) // 3
.at()
대상 배열을 인덱싱합니다.
음수 값을 사용하면 뒤에서부터 인덱싱합니다.
const arr = ['A', 'B', 'C']
console.log(arr[0]) // 'A'
console.log(arr.at(0)) // 'A'
console.log(arr[arr.length - 1]) // 'C'
console.log(arr.at(-1)) // 'C'
.concat()
대상 배열과 주어진 배열을 병합해 새로운 배열을 반환합니다.
const arr1 = ['A', 'B', 'C']
const arr2 = ['D', 'E', 'F']
const arr3 = arr1.concat(arr2)
// const arr3 = [...arr1, ...arr2]
console.log(arr1) // ['A', 'B', 'C']
console.log(arr2) // ['D', 'E', 'F']
console.log(arr3) // ['A', 'B', 'C', 'D', 'E', 'F']
.every()
대상 배열의 모든 요소가 콜백 테스트를 통과(참(Truthy)을 반환)하는지 확인합니다.
최초로 테스트가 실패하면, 이후 콜백은 실행되지 않고 false를 반환합니다.
const arr = [1, 2, 3, 4]
const isValid = arr.every(item => item < 5)
console.log(isValid) // true
const arr = [1, 2, 3, 4]
const isValid = arr.every(item => {
console.log(item)
return item < 3
})
// 1
// 2
console.log(isValid) // false
.filter()
대상 배열에서 콜백 테스트를 통과하는 모든 요소로 새로운 배열을 만들어 반환합니다.
만약 모든 요소가 테스트를 통과하지 못하면 빈 배열을 반환합니다.
const numbers = [1, 20, 7, 9, 104, 0, 58]
const filteredNumbers = numbers.filter(number => number < 30)
console.log(filteredNumbers) // [1, 20, 7, 9, 0]
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
const adults = users.filter(user => user.age >= 19)
console.log(adults) // [ Neo객체, Amy객체 ]
.find()
대상 배열에서 콜백 테스트를 통과하는 첫 번째 요소를 반환합니다.
최초로 테스트가 통과하면, 이후 콜백은 실행되지 않습니다.
모든 테스트가 실패하면, undefined를 반환합니다.
const arr = [5, 8, 130, 12, 44]
const foundItem = arr.find(item => item > 10)
console.log(foundItem) // 130
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
const foundUser = users.find(user => user.name === 'Amy')
console.log(foundUser) // { name: 'Amy', age: 22 }
.findIndex()
대상 배열에서 콜백 테스트를 통과하는 첫 번째 요소의 인덱스를 반환합니다.
최초로 테스트가 통과하면, 이후 콜백은 실행되지 않습니다.
모든 테스트가 실패하면, -1을 반환합니다.
const arr = [5, 8, 130, 12, 44]
// 0 1 2 3 4
const index = arr.findIndex(item => item > 10)
console.log(index) // 2
.flat()
대상 배열의 모든 하위 배열을 지정한 깊이(Depth)까지 이어붙인 새로운 배열을 반환합니다.
깊이의 기본값은 1입니다.
const arr = [1, 2, [3, 4]]
console.log(arr.flat()) // [1, 2, 3, 4]
const arr = [1, 2, [3, 4, [5, 6]]]
console.log(arr.flat()) // [1, 2, 3, 4, [5, 6]]
console.log(arr.flat(2)) // [1, 2, 3, 4, 5, 6]
const arr = [1, 2, [3, 4, [5, 6, [7, 8]]]]
console.log(arr.flat()) // [1, 2, 3, 4, [5, 6, [7, 8]]]
console.log(arr.flat(2)) // [1, 2, 3, 4, 5, 6, [7, 8]]
console.log(arr.flat(Infinity)) // [1, 2, 3, 4, 5, 6, 7, 8]
.forEach()
대상 배열의 길이만큼 주어진 콜백을 실행합니다.
const arr = ['A', 'B', 'C']
arr.forEach(item => console.log(item))
for (let i = 0; i < arr.length; i += 1) {
console.log(arr[i])
}
// 'A'
// 'B'
// 'C'
.forEach()는 중간에 반복을 멈출 수 없습니다.
반복을 멈출 수 있어야 한다면, for 반복문을 사용해야 합니다.
const arr = ['A', 'B', 'C']
for (let i = 0; i < arr.length; i += 1) {
if (i > 1) {
break
}
console.log(arr[i])
}
// 'A'
// 'B'
.includes()
대상 배열이 특정 요소를 포함하고 있는지 확인합니다.
const arr = [1, 2, 3]
console.log(arr.includes(2)) // true
const fruits = ['Apple', 'Banana', 'Cherry']
console.log(fruits.includes('Apple')) // true
console.log(fruits.includes('cherry')) // false
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
console.log(users.includes({ name: 'Neo', age: 85 })) // false
const neo = users[0]
console.log(users.includes(neo)) // true
.join()
대상 배열의 모든 요소를 구분자로 연결한 문자를 반환합니다.
const fruits = ['Apple', 'Banana', 'Cherry']
console.log(fruits.join()) // 'Apple,Banana,Cherry'
console.log(fruits.join(', ')) // 'Apple, Banana, Cherry'
console.log(fruits.join('/')) // 'Apple/Banana/Cherry'
.map()
대상 배열의 길이만큼 주어진 콜백을 실행하고,
콜백의 반환 값을 모아 새로운 배열을 반환합니다.
const numbers = [1, 2, 3, 4]
const newNumbers = numbers.map(item => item * 2)
console.log(newNumbers) // [2, 4, 6, 8]
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
const newUsers = users.map(user => ({
...user,
isValid: true,
email: null
}))
const userNames = users.map(user => user.name)
console.log(newUsers) // [{ name: 'Neo', age: 85, isValid: true, email: null }, ...]
console.log(userNames) // ['Neo', 'Amy', 'Lewis']
.pop()
대상 배열에서 마지막 요소를 제거하고 그 요소를 반환합니다.
대상 배열 원본이 변경됩니다.
const fruits = ['Apple', 'Banana', 'Cherry']
console.log(fruits.pop()) // 'Cherry'
console.log(fruits) // ['Apple', 'Banana']
.push()
대상 배열의 마지막에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환합니다.
대상 배열 원본이 변경됩니다.
const fruits = ['Apple', 'Banana', 'Cherry']
const newLength = fruits.push('Orange')
console.log(newLength) // 4
console.log(fruits) // ['Apple', 'Banana', 'Cherry', 'Orange']
fruits.push('Mango', 'Strawberry')
console.log(fruits)
// ['Apple', 'Banana', 'Cherry', 'Orange', 'Mango', 'Strawberry']
.reduce()
대상 배열의 길이만큼 주어진 콜백을 실행하고, 마지막에 호출되는 콜백의 반환 값을 반환합니다.
각 콜백의 반환 값은 다음 콜백으로 전달됩니다.
const numbers = [1, 2, 3]
// const result = numbers.reduce((acc, cur) => acc + cur, 0)
const result = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue
}, 0)
console.log(result) // 6
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
// 총 나이 계산
const totalAge = users.reduce((acc, cur) => acc + cur.age, 0)
console.log(totalAge) // 118
console.log(`평균 나이: ${(totalAge / users.length).toFixed(1)}세`) // '평균 나이: 39.3세'
// 모든 이름 추출
const names = users
.reduce((acc, cur) => {
acc.push(cur.name)
return acc
}, [])
.join(', ')
console.log(names) // 'Neo, Amy, Lewis'
.reverse()
대상 배열의 순서를 반전합니다.
대상 배열 원본이 변경됩니다.
const arr = ['A', 'B', 'C']
const reversed = arr.reverse()
console.log(reversed) // ['C', 'B', 'A']
console.log(arr) // ['C', 'B', 'A']
const str = 'Hello~'
const reversedStr = str.split('').reverse().join('')
console.log(reversedStr) // '~olleH'
console.log(str) // 'Hello~'
.shift()
대상 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환합니다.
대상 배열 원본이 변경됩니다.
const arr = ['A', 'B', 'C']
console.log(arr.shift()) // 'A'
console.log(arr) // ['B', 'C']
.slice()
대상 배열의 일부를 추출해 새로운 배열을 반환합니다.
두 번째 인수 직전까지 추출하고, 두 번째 인수를 생략하면 대상 배열의 끝까지 추출합니다.
const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
console.log(arr.slice(0, 3)) // ['A', 'B', 'C']
console.log(arr.slice(4, -1)) // ['E', 'F']
console.log(arr.slice(4)) // ['E', 'F', 'G']
console.log(arr) // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
.some()
대상 배열의 어떤 요소라도 콜백 테스트를 통과하는지 확인합니다.
const arr = [1, 2, 3, 4]
const isValid = arr.some(item => item > 3)
console.log(isValid) // true
.sort()
대상 배열을 콜백의 반환 값에 따라 정렬합니다.
콜백을 제공하지 않으면, 요소를 문자열로 변환하고 유니코드 코드 포인트 순서로 정렬합니다.
대상 배열 원본이 변경됩니다.
콜백의 반환 값:
음수: a를 낮은 순서로 정렬
0: 순서 변경 없음
양수: b를 낮은 순서로 정렬
const numbers = [4, 17, 2, 103, 3, 1, 0]
numbers.sort()
console.log(numbers) // [0, 1, 103, 17, 2, 3, 4]
numbers.sort((a, b) => a - b)
console.log(numbers) // [0, 1, 2, 3, 4, 17, 103]
numbers.sort((a, b) => b - a)
console.log(numbers) // [103, 17, 4, 3, 2, 1, 0]
const users = [
{ name: 'Neo', age: 85 },
{ name: 'Amy', age: 22 },
{ name: 'Lewis', age: 11 }
]
users.sort((a, b) => a.age - b.age)
console.log(users) // [ Lewis객체, Amy객체, Neo객체 ]
// users.sort((a, b) => b.age - a.age)
// console.log(users) // [ Neo객체, Amy객체, Lewis객체 ]
.splice()
대상 배열에 요소를 추가하거나 삭제하거나 교체합니다.
대상 배열 원본이 변경됩니다.
요소 추가
const arr = ['A', 'B', 'C']
arr.splice(2, 0, 'X')
console.log(arr) // ['A', 'B', 'X', 'C']
요소 삭제
const arr = ['A', 'B', 'C']
arr.splice(1, 1)
console.log(arr) // ['A', 'C']
요소 교체
const arr = ['A', 'B', 'C']
arr.splice(1, 1, 'X')
console.log(arr) // ['A', 'X', 'C']
요소 추가 및 삭제
const arr = ['A', 'B', 'C']
arr.splice(0, 0, 'X', 'Y', 'Z')
console.log(arr) // ['X', 'Y', 'Z', 'A', 'B', 'C']
.unshift()
새로운 요소를 대상 배열의 맨 앞에 추가하고 새로운 배열의 길이를 반환합니다. 대상 배열 원본이 변경됩니다.
const arr = ['A', 'B', 'C']
console.log(arr.unshift('X')) // 4
console.log(arr) // ['X', 'A', 'B', 'C']
Array.from()
유사 배열(Array-like)을 실제 배열로 반환합니다.
const arraylike = {
0: 'A',
1: 'B',
2: 'C',
length: 3
}
console.log(arraylike.constructor === Array) // false
console.log(arraylike.constructor === Object) // true
// arraylike.forEach(item => console.log(item)) // Error!
Array.from(arraylike).forEach(item => console.log(item))
// 'A'
// 'B'
// 'C'
Array.isArray()
배열 데이터인지 확인합니다.
const array = ['A', 'B', 'C']
const arraylike = {
0: 'A',
1: 'B',
2: 'C',
length: 3
}
console.log(Array.isArray(array)) // true
console.log(Array.isArray(arraylike)) // false