JavaScript 'console'
Use the 'console' more professional developer.
1. What is console? π©βπ»
Console
μ Node API λλ Browser API μμ κΈ°λ³ΈμΌλ‘ μ 곡νλ API μ€ νλλ‘ μ½λκ° κ°κ³ μλ λ°μ΄ν° λλ λ©μμ§μ κ°μ κ²λ€μ ν°λ―Έλμ
μκ°ν ν΄μ£Όλ λꡬλ€. λλΆλΆ λ€λ₯Έ μΈμ΄μμ log
λλ logger
μ κ°μ μ΄λ¦μΌλ‘ μ 곡νκ³ μμΌλ©°, JavaScript μμλ console
μ΄λΌλ μ΄λ¦μΌλ‘
μ 곡νκ³ μλ€.
2. Web API Console π©βπ»
Frontend μμ μ¬μ©ν κ²μ λΈλΌμ°μ κ° Web API λ‘ μ 곡νλ Console API λ₯Ό μ¬μ©νκ² λλ€. λ§ν¬λ₯Ό λ°λΌ MDN μ¬μ΄νΈλ₯Ό λ°©λ¬Έν΄λ³΄λ©΄ console
μ μ λ§ λ€μν λ©μλκ° μλ κ²μ νμΈν μ μλ€. μ΄ μ€ μΌλΆλ Web Worker
μμλ μ¬μ©ν μ μλ κ²λ€μ΄λ©°, λ§μ΄ μ¬μ©λλ κ² μμ£Όλ‘ μ 리ν΄λ³Έλ€.
1. console.log
λ‘κ·Έλ₯Ό μΆλ ₯νλ κΈ°λ³Έ λ©μλλ‘ Variadic Parameters λ₯Ό λ°μΌλ―λ‘ λ€μκ³Ό κ°μ΄ μ μ©νκ² μ¬μ©ν μ μλ€.
const person = { name: 'λ무', age: 20, like: 'μν' }
const beers = ['ν
λΌ', 'μΌλ¦¬', 'ν¬λ‘¬λ°μ»€', '1664 λΈλ']
console.log(person)
// {name: 'λ무', age: 20, like: 'μν'}
console.log('λꡬ?', person)
// λꡬ? βΆοΈ {name: 'λ무', age: 20, like: 'μν'}
console.log('μ’μνλ λ§₯μ£Ό?', beers)
// μ’μνλ λ§₯μ£Ό? βΆοΈ (4) ['ν
λΌ', 'μΌλ¦¬', 'ν¬λ‘¬λ°μ»€', '1664 λΈλ']
console.log('λꡬ?', person, 'μ’μνλ λ§₯μ£Ό?', beers)
// λꡬ? βΆοΈ {name: 'λ무', age: 20, like: 'μν'} μ’μνλ λ§₯μ£Ό? βΆοΈ (4) ['ν
λΌ', 'μΌλ¦¬', 'ν¬λ‘¬λ°μ»€', '1664 λΈλ']
κ°λ° λ¨κ³μμλ§ μ¬μ©νλ€. λ ΈμΆμ΄ λμλ μ λλ λ°μ΄ν°κ° λ ΈμΆλλ λ¬Έμ κ° μμ μ μμΌλ©°, λ ΈμΆλμ΄λ μκ΄ μλ λ°μ΄ν°λΌ νλλΌλ
μ±λ₯ μ΄μ
μ μμΈμ΄ λ μ μμΌλ―λ‘ λ°°ν¬μμλ μ κ±°ν΄μΌνλ€.
2. console.info
log κ° console μ μΆλ ₯νλλ° μμ΄ κΈ°λ³Ένμ΄λΌλ©΄, μ 보
λΌλ κ²μ μλ―Έλ₯Ό λμ΄ μ’ λ λμ λκ² μΆλ ₯μν€λ μ΅μ
μΌλ‘ λΈλΌμ°μ κ°λ°μ λꡬμ Console
νμμ info
λ§ νν°λ§ ν μ μλ μ΅μ
μ μ 곡νλ€. λ°λΌμ μλ§μ log μ¬μ΄μμ νΉμ log λ₯Ό μ£Όμ κΉκ² 보기 μν΄ console.info
λ₯Ό μ¬μ©νλ©΄
λ°λ‘ λΆλ¦¬μμΌ νμΈν μ μλ€.
const res = JSON.parse(/* { } */)
console.info('μλ΅ κ²°κ³Ό', res)
λ§μ°¬κ°μ§λ‘ κ°λ° λ¨κ³μμλ§ μ¬μ©νλ κ²μ΄ μ’μΌλ©°, μ λ§ νμν μ λ³΄μΌ κ²½μ°λ λ°°ν¬μμλ λ¨κ²¨λ μ μλ€.
3. console.debug
λΈλΌμ°μ κ°λ°μ λꡬμμ νλμμΌλ‘ λ‘κ·Έλ₯Ό μΆλ ₯ν΄μ€λ€. console μ νμ©ν λλ²κΉ μ λΆλ¦¬λ μμμ μ μ©ν΄ λλ²κΉ μ λΉ λ₯΄κ² ν μ μλλ‘ λλλ€.
const res = foo()
console.debug('ν¨μ μ€ν κ²°κ³Ό', res)
4. console.warn
μΉλͺ μ μΈ μλ¬λ μλμ§λ§ μ£Όμν΄μΌν κ²μ λν΄ μμ€ν μ΄ κ²½κ³ λ₯Ό νλ κ²½μ°κ° μλλ°, μ΄λ μ¬μ©λλ λ©μλλ‘ μμ μ¬μ©μκ° μ§μ μΆλ ₯μ ꡬννκΈ°λ νλ€.
const foo = arr => {
if (arr.length === 0) {
console.warn('λΉ λ°°μ΄μ
λλ€!')
return
}
console.log('μ λ¬λ λ°°μ΄μ', arr)
}
foo([]) // λΉ λ°°μ΄μ
λλ€!
5. console.error
μ λ§λ‘ μλ¬λ₯Ό μΆλ ₯νκΈ° μν΄ μ¬μ©νλ€. μμ€ν
μ μν΄ μλμΌλ‘ μΆλ ₯λλ μλ¬ λ©μμ§κ° μ΄ λ©μλλ₯Ό μ¬μ©νλ©°, μ¬μ©μκ° μμΈ μ²λ¦¬λ₯Ό ν λ catch
μ μ§μ ꡬννκΈ°λ νλ€. κ°λ°μ λꡬμ Console νμ error
λ§ νν°λ§ ν μ μλ μ΅μ
μ μ 곡ν λΏ μλλΌ
λΉ¨κ°μμΌλ‘ λ‘κ·Έλ₯Ό μΆλ ₯ν΄μ€λ€.
const foo = arr => {
if (!(arr instanceof Array)) {
console.error('λ°°μ΄μ΄ μλλλ€!')
return
}
if (arr.length === 0) {
console.warn('λΉ λ°°μ΄μ
λλ€!')
return
}
console.log('μ λ¬λ λ°°μ΄μ', arr)
}
foo(person) // λ°°μ΄μ΄ μλλλ€!
6. console.assert
assert
λ©μλλ ν
μ€νΈ μ½λλ₯Ό μμ±ν΄λ³Έ μ¬λμ΄λΌλ©΄ λꡬλ μκ³ μλ λ©μλμΌ κ²μ΄λ€. Web API Console μμ assert
λ©μλλ success
λ 무μν μ± fail
μΈ κ²½μ°μλ§ μ ν΄λμ λ©μμ§λ₯Ό μΆλ ₯ν μ μλλ‘ νλ€.
console.assert(person.name === 'λ무', 'λ‘! μ΄λ¦μ νλ Έλ€μ.')
console.assert(person.age === 25, 'λ‘! λμ΄λ₯Ό νλ Έλ€μ.') // λ‘! λμ΄λ₯Ό νλ Έλ€μ.
7. console.table
κ°μ²΄ λ°μ΄ν°λ₯Ό ν
μ΄λΈ ννλ‘ μΆλ ₯ν΄μ€λ€.
- Array
const beers = ['ν
λΌ', 'μΌλ¦¬', 'ν¬λ‘¬λ°μ»€', '1664 λΈλ']
console.table(beers)
- Object
const person = { name: 'λ무', age: 20, like: 'μν' }
console.table(person)
κ·Έλ¦¬κ³ console.table
λ©μλλ λ λ²μ§Έ Arguments λ‘ Object μμ μΆλ ₯ν 컬λΌ
μ μ§μ ν μ μλ€.
const students = [
{ name: 'λ°μ무κ°', age: 20, like: 'μμ
' },
{ name: 'μ΄μ무κ°', age: 20, like: 'μΌν' },
{ name: 'κΉμ무κ°', age: 20, like: 'μ΄λ' },
{ name: 'μ μ무κ°', age: 20, like: 'μν' }
]
console.table(students, ['name', 'like'])
8. console.dir
Object λ₯Ό μΆλ ₯ν λ μμΈν μμ±μ μ€ μ μλ λ©μλλ‘ ν¬λ‘¬ λΈλΌμ°μ Web API μ Console μμλ λ³λ€λ₯Έ μ°¨μ΄λ₯Ό 보μ΄μ§ μλλ€. νμ§λ§ Node API μ Console μμλ depth λ₯Ό μ€μ ν΄ μ μ©νλ λ± λ€μν μΆλ ₯ μ΅μ μ μ€μ ν μ μλ€.
console.dir(foo, {colors: false, depth: 1})
9. console.time & console.timeEnd
ν¨μμ μ€ν μκ°μ μΈ‘μ νλ λ° μ¬μ©ν μ μλ€. console.time
κ³Ό console.timeEnd
λ λμΌν μ΄λ¦μ μ¬μ©ν΄μΌνλ€.
function factorial(to, acc = 1) {
if (to === 0) return acc
return factorial(to - 1, to * acc)
}
console.time('loop test')
const factorial50 = factorial(50)
console.log(factorial50)
console.timeEnd('loop test')
3.0414093201713376e+64
loop test: 0.06201171875 ms
μΆκ°λ‘ console.timeLog
λ₯Ό μ¬μ©νλ©΄ λ΄λΆμμ lap
μΆλ ₯μ΄ κ°λ₯νλ€.
console.time('loop test')
const factorial50 = factorial(50)
console.timeLog('loop test')
console.log(factorial50)
console.timeEnd('loop test')
loop test: 0.011962890625 ms
3.0414093201713376e+64
loop test: 0.06396484375 ms
ν©ν λ¦¬μΌ κ³μ°κ³Ό μ½μ μΆλ ₯ μ€κ°μ console.timeLog
λ©μλλ₯Ό μ¬μ©ν΄ lap
μ μΆλ ₯ν΄ ν©ν λ¦¬μΌ 50 μ체λ κΈλ°© μ’
λ£λμ§λ§ μ½μ μΆλ ₯μ΄ λ λ§μ
μκ°μ μλͺ¨νλ€λ κ²μ μ μ μλ€.
10. console.count
λ³λμ ꡬν μμ΄λ ν¨μκ° νΈμΆλ λλ§λ€ μ§μ ν String κ³Ό ν¨κ» νμλ₯Ό μΆλ ₯ν΄μ€λ€. λ°λΌμ νΉμ ν¨μμ νΈμΆ νμλ₯Ό μκ³ μ ν λ μ μ©νλ€.
function factorial(to, acc = 1) {
console.count('factorial is called')
if (to === 0) return acc
return factorial(to - 1, to * acc)
}
factorial(5)
factorial is called: 1
factorial is called: 2
factorial is called: 3
factorial is called: 4
factorial is called: 5
factorial is called: 6
11. console.trace
ν¨μμ νΈμΆ μ€νμ μΆμ νλ μΌλ°μ μΈ λ°©λ²μ λλ²κΉ ν΄μ μ¬μ©νλ κ²μ΄λ€.
function f1() { f2() }
function f2() { f3() }
function f3() {
debugger
console.log('hi!')
}
f1()
κ·Έλ°λ° console.trace
λ©μλλ₯Ό μ¬μ©νλ©΄ λλ²κ±°μ λμ μμ΄λ ν°λ―Έλμ λ°λ‘ ν¨μμ Call Stack μ μΆλ ₯ν μ μμ΄
Asynchronous Function
κ° ν¬ν¨λ κ²½μ° ν¨μκ° μ΄λ»κ² νΈμΆ λμλμ§ μ½κ² νμ
ν μ μλλ‘ λμμ€λ€.
function f1() { f2() }
function f2() { f3() }
function f3() {
console.trace()
console.log('hi!')
}
f1()
βΌ console.trace
f3 @ main.ts:12
f2 @ main.ts:8
f1 @ main.ts:4
(anonymous) @ main.ts:15
Reference
- βconsole.β MDN. Mar. 13, 2023, Console API.
- βμ½μ λ‘κ·Έ μ λλ‘ μ°κ³ μμκΉ?.β Youtube. Jun. 17, 2021, μ½μ λ‘κ·Έ μ λλ‘ μ°κ³ μμκΉ?.