Util
[Stable: 2 - Stable]
Stable: 2 Stability: 2 - 안정적
소스 코드: lib/util.js
node:util
모듈은 Node.js 내부 API의 요구 사항을 지원합니다. 많은 유틸리티가 애플리케이션 및 모듈 개발자에게도 유용합니다. 액세스하려면 다음을 수행하십시오.
const util = require('node:util')
util.callbackify(original)
추가된 버전: v8.2.0
original
<Function>async
함수- 반환: <Function> 콜백 스타일 함수
async
함수(또는 Promise
를 반환하는 함수)를 가져와서 오류 우선 콜백 스타일을 따르는 함수를 반환합니다. 즉, 마지막 인수로 (err, value) => ...
콜백을 취합니다. 콜백에서 첫 번째 인수는 거부 이유(또는 Promise
가 해결된 경우 null
)이고, 두 번째 인수는 해결된 값입니다.
const util = require('node:util')
async function fn() {
return 'hello world'
}
const callbackFunction = util.callbackify(fn)
callbackFunction((err, ret) => {
if (err) throw err
console.log(ret)
})
다음이 출력됩니다.
hello world
콜백은 비동기적으로 실행되며 제한된 스택 추적을 갖습니다. 콜백이 오류를 던지면 프로세스는 'uncaughtException'
이벤트를 발생시키고, 처리되지 않으면 종료됩니다.
null
은 콜백의 첫 번째 인수로 특별한 의미를 가지므로 래핑된 함수가 falsy 값을 이유로 Promise
를 거부하면 해당 값은 원래 값이 reason
이라는 필드에 저장된 Error
로 래핑됩니다.
function fn() {
return Promise.reject(null)
}
const callbackFunction = util.callbackify(fn)
callbackFunction((err, ret) => {
// Promise가 `null`로 거부되면 Error로 래핑되고
// 원본 값은 `reason`에 저장됩니다.
err && Object.hasOwn(err, 'reason') && err.reason === null // true
})
util.debuglog(section[, callback])
추가된 버전: v0.11.3
section
<string>debuglog
함수가 생성되는 애플리케이션 부분을 식별하는 문자열입니다.callback
<Function> 최적화된 로깅 함수인 함수 인자를 사용하여 로깅 함수가 처음 호출될 때 호출되는 콜백입니다.- 반환 값: <Function> 로깅 함수
util.debuglog()
메서드는 NODE_DEBUG
환경 변수의 존재 여부에 따라 조건부로 디버그 메시지를 stderr
에 쓰는 함수를 만드는 데 사용됩니다. section
이름이 해당 환경 변수 값 내에 나타나면 반환된 함수는 console.error()
와 유사하게 작동합니다. 그렇지 않으면 반환된 함수는 아무 작업도 하지 않습니다.
const util = require('node:util')
const debuglog = util.debuglog('foo')
debuglog('hello from foo [%d]', 123)
이 프로그램이 환경에서 NODE_DEBUG=foo
와 함께 실행되면 다음과 같은 출력을 냅니다.
FOO 3245: hello from foo [123]
여기서 3245
는 프로세스 ID입니다. 해당 환경 변수가 설정되지 않은 상태에서 실행되면 아무것도 출력하지 않습니다.
section
은 와일드카드도 지원합니다.
const util = require('node:util')
const debuglog = util.debuglog('foo-bar')
debuglog("hi there, it's foo-bar [%d]", 2333)
환경에서 NODE_DEBUG=foo*
와 함께 실행되면 다음과 같은 출력을 냅니다.
FOO-BAR 3257: hi there, it's foo-bar [2333]
여러 쉼표로 구분된 section
이름을 NODE_DEBUG
환경 변수에 지정할 수 있습니다. NODE_DEBUG=fs,net,tls
.
선택적 callback
인수는 초기화나 불필요한 래핑이 없는 다른 함수로 로깅 함수를 대체하는 데 사용할 수 있습니다.
const util = require('node:util')
let debuglog = util.debuglog('internals', debug => {
// 섹션이 활성화되었는지 테스트하는 것을 최적화하는 로깅 함수로 대체합니다.
debuglog = debug
})
debuglog().enabled
추가된 버전: v14.9.0
util.debuglog().enabled
getter는 NODE_DEBUG
환경 변수의 존재 여부에 따라 조건부로 사용할 수 있는 테스트를 만드는 데 사용됩니다. section
이름이 해당 환경 변수 값 내에 나타나면 반환 값은 true
가 됩니다. 그렇지 않으면 반환 값은 false
가 됩니다.
const util = require('node:util')
const enabled = util.debuglog('foo').enabled
if (enabled) {
console.log('foo에서 안녕하세요 [%d]', 123)
}
이 프로그램을 NODE_DEBUG=foo
환경에서 실행하면 다음과 같은 출력이 나타납니다.
foo에서 안녕하세요 [123]
util.debug(section)
추가된 버전: v14.9.0
util.debuglog
의 별칭입니다. 사용법은 util.debuglog().enabled
만 사용할 때 로깅을 의미하지 않는 가독성을 허용합니다.
util.deprecate(fn, msg[, code])
[기록]
버전 | 변경 사항 |
---|---|
v10.0.0 | 더 이상 사용되지 않는 경고는 각 코드에 대해 한 번만 발생합니다. |
v0.8.0 | 추가된 버전: v0.8.0 |
fn
<Function> 더 이상 사용되지 않는 함수입니다.msg
<string> 더 이상 사용되지 않는 함수가 호출될 때 표시할 경고 메시지입니다.code
<string> 더 이상 사용되지 않는 코드입니다. 코드 목록은 더 이상 사용되지 않는 API 목록을 참조하십시오.- 반환 값: <Function> 경고를 내보내도록 래핑된 더 이상 사용되지 않는 함수입니다.
util.deprecate()
메서드는 fn
(함수 또는 클래스일 수 있음)을 더 이상 사용되지 않는 것으로 표시하는 방식으로 래핑합니다.
const util = require('node:util')
exports.obsoleteFunction = util.deprecate(() => {
// 여기에서 작업을 수행합니다.
}, 'obsoleteFunction()은 더 이상 사용되지 않습니다. 대신 newShinyFunction()을 사용하십시오.')
호출되면 util.deprecate()
는 'warning'
이벤트를 사용하여 DeprecationWarning
을 내보내는 함수를 반환합니다. 경고는 반환된 함수가 처음 호출될 때 stderr
에 내보내지고 출력됩니다. 경고가 내보내진 후에는 래핑된 함수가 경고를 내보내지 않고 호출됩니다.
동일한 선택적 code
가 util.deprecate()
에 대한 여러 호출에서 제공되는 경우 경고는 해당 code
에 대해 한 번만 내보내집니다.
const util = require('node:util')
const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001')
const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001')
fn1() // 코드 DEP0001로 더 이상 사용되지 않는 경고를 내보냅니다.
fn2() // 코드가 같으므로 더 이상 사용되지 않는 경고를 내보내지 않습니다.
--no-deprecation
또는 --no-warnings
명령줄 플래그가 사용되거나 process.noDeprecation
속성이 첫 번째 더 이상 사용되지 않는 경고 이전에 true
로 설정된 경우 util.deprecate()
메서드는 아무 것도 하지 않습니다.
--trace-deprecation
또는 --trace-warnings
명령줄 플래그가 설정되거나 process.traceDeprecation
속성이 true
로 설정되면 더 이상 사용되지 않는 함수가 처음 호출될 때 경고와 스택 추적이 stderr
에 출력됩니다.
--throw-deprecation
명령줄 플래그가 설정되거나 process.throwDeprecation
속성이 true
로 설정되면 더 이상 사용되지 않는 함수가 호출될 때 예외가 발생합니다.
--throw-deprecation
명령줄 플래그와 process.throwDeprecation
속성은 --trace-deprecation
및 process.traceDeprecation
보다 우선합니다.
util.format(format[, ...args])
[히스토리]
버전 | 변경 사항 |
---|---|
v12.11.0 | %c 지정자가 이제 무시됩니다. |
v12.0.0 | format 인자는 실제로 포맷 지정자를 포함하는 경우에만 그렇게 처리됩니다. |
v12.0.0 | format 인자가 포맷 문자열이 아닌 경우, 출력 문자열의 포맷은 더 이상 첫 번째 인자의 유형에 의존하지 않습니다. 이 변경은 첫 번째 인자가 문자열이 아닐 때 출력되던 문자열에서 이전에 존재하던 따옴표를 제거합니다. |
v11.4.0 | %d , %f , %i 지정자가 이제 Symbol을 올바르게 지원합니다. |
v11.4.0 | %o 지정자의 depth 가 다시 기본 깊이 4를 갖습니다. |
v11.0.0 | %o 지정자의 depth 옵션이 이제 기본 깊이로 대체됩니다. |
v10.12.0 | %d 및 %i 지정자가 이제 BigInt를 지원합니다. |
v8.4.0 | %o 및 %O 지정자가 이제 지원됩니다. |
v0.5.3 | v0.5.3에 추가되었습니다. |
format
<string>printf
와 유사한 포맷 문자열.
util.format()
메서드는 첫 번째 인자를 0개 이상의 포맷 지정자를 포함할 수 있는 printf
와 유사한 포맷 문자열로 사용하여 포맷된 문자열을 반환합니다. 각 지정자는 해당하는 인자의 변환된 값으로 대체됩니다. 지원되는 지정자는 다음과 같습니다.
%s
:String
은BigInt
,Object
및-0
을 제외한 모든 값을 변환하는 데 사용됩니다.BigInt
값은n
으로 표현되며, 사용자 정의toString
함수가 없는 객체는{ depth: 0, colors: false, compact: 3 }
옵션을 사용하여util.inspect()
로 검사됩니다.%d
:Number
는BigInt
및Symbol
을 제외한 모든 값을 변환하는 데 사용됩니다.%i
:parseInt(value, 10)
은BigInt
및Symbol
을 제외한 모든 값에 사용됩니다.%f
:parseFloat(value)
는Symbol
을 제외한 모든 값에 사용됩니다.%j
: JSON. 인자가 순환 참조를 포함하는 경우'[Circular]'
문자열로 대체됩니다.%o
:Object
. 일반적인 JavaScript 객체 포맷을 사용하는 객체의 문자열 표현입니다.{ showHidden: true, showProxy: true }
옵션을 사용하는util.inspect()
와 유사합니다. 이는 열거 불가능한 속성 및 프록시를 포함한 전체 객체를 표시합니다.%O
:Object
. 일반적인 JavaScript 객체 포맷을 사용하는 객체의 문자열 표현입니다. 옵션이 없는util.inspect()
와 유사합니다. 이는 열거 불가능한 속성 및 프록시를 포함하지 않는 전체 객체를 표시합니다.%c
:CSS
. 이 지정자는 무시되며 전달된 CSS를 건너뜁니다.%%
: 단일 퍼센트 기호 ('%'
). 이는 인자를 소비하지 않습니다.- 반환 값: <string> 포맷된 문자열
지정자에 해당하는 인자가 없는 경우, 대체되지 않습니다.
util.format('%s:%s', 'foo')
// 반환 값: 'foo:%s'
포맷 문자열의 일부가 아닌 값은 유형이 string
이 아니면 util.inspect()
를 사용하여 포맷됩니다.
util.format()
메서드에 포맷 지정자 수보다 많은 인자가 전달된 경우, 추가 인자는 공백으로 구분되어 반환된 문자열에 연결됩니다.
util.format('%s:%s', 'foo', 'bar', 'baz')
// 반환 값: 'foo:bar baz'
첫 번째 인자에 유효한 포맷 지정자가 포함되어 있지 않으면, util.format()
은 모든 인자를 공백으로 구분하여 연결한 문자열을 반환합니다.
util.format(1, 2, 3)
// 반환 값: '1 2 3'
인자가 하나만 util.format()
에 전달된 경우, 포맷하지 않고 그대로 반환됩니다.
util.format('%% %s')
// 반환 값: '%% %s'
util.format()
은 디버깅 도구로 의도된 동기 메서드입니다. 일부 입력 값은 이벤트 루프를 차단할 수 있는 상당한 성능 오버헤드를 가질 수 있습니다. 이 함수를 주의해서 사용하고 중요한 코드 경로에서 사용하지 마십시오.
util.formatWithOptions(inspectOptions, format[, ...args])
추가된 버전: v10.0.0
이 함수는 util.format()
과 동일하지만, util.inspect()
로 전달되는 옵션을 지정하는 inspectOptions
인자를 받는다는 점이 다릅니다.
util.formatWithOptions({ colors: true }, '객체 %O 보기', { foo: 42 })
// 터미널에 출력될 때 `42`가 숫자로 색상이 지정된 '객체 { foo: 42 } 보기'를 반환합니다.
util.getCallSites(frameCountOrOptions, [options])
[기록]
버전 | 변경 사항 |
---|---|
v23.3.0 | API 이름이 util.getCallSite 에서 util.getCallSites() 로 변경됨. |
v22.9.0 | 추가된 버전: v22.9.0 |
frameCount
<number> 호출 사이트 객체로 캡처할 프레임의 선택적 개수입니다. 기본값:10
. 허용 범위는 1에서 200 사이입니다.options
<Object> 선택 사항sourceMap
<boolean> 소스 맵에서 스택 추적의 원래 위치를 재구성합니다.--enable-source-maps
플래그를 사용하여 기본적으로 활성화됩니다.
반환 값: <Object[]> 호출 사이트 객체 배열
호출 함수 스택을 포함하는 호출 사이트 객체 배열을 반환합니다.
const util = require('node:util')
function exampleFunction() {
const callSites = util.getCallSites()
console.log('호출 사이트:')
callSites.forEach((callSite, index) => {
console.log(`호출 사이트 ${index + 1}:`)
console.log(`함수 이름: ${callSite.functionName}`)
console.log(`스크립트 이름: ${callSite.scriptName}`)
console.log(`라인 번호: ${callSite.lineNumber}`)
console.log(`열 번호: ${callSite.column}`)
})
// 호출 사이트 1:
// 함수 이름: exampleFunction
// 스크립트 이름: /home/example.js
// 라인 번호: 5
// 열 번호: 26
// 호출 사이트 2:
// 함수 이름: anotherFunction
// 스크립트 이름: /home/example.js
// 라인 번호: 22
// 열 번호: 3
// ...
}
// 다른 스택 레이어를 시뮬레이션하는 함수
function anotherFunction() {
exampleFunction()
}
anotherFunction()
sourceMap
옵션을 true
로 설정하여 원래 위치를 재구성할 수 있습니다. 소스 맵을 사용할 수 없는 경우 원래 위치는 현재 위치와 동일합니다. --experimental-transform-types
를 사용할 때와 같이 --enable-source-maps
플래그가 활성화되면 sourceMap
은 기본적으로 true가 됩니다.
import util from 'node:util'
interface Foo {
foo: string
}
const callSites = util.getCallSites({ sourceMap: true })
// sourceMap 포함:
// 함수 이름: ''
// 스크립트 이름: example.js
// 라인 번호: 7
// 열 번호: 26
// sourceMap 없음:
// 함수 이름: ''
// 스크립트 이름: example.js
// 라인 번호: 2
// 열 번호: 26
util.getSystemErrorName(err)
추가된 버전: v9.7.0
Node.js API에서 온 숫자 오류 코드에 대한 문자열 이름을 반환합니다. 오류 코드와 오류 이름 간의 매핑은 플랫폼에 따라 다릅니다. 일반 오류 이름은 일반 시스템 오류를 참조하세요.
fs.access('file/that/does/not/exist', err => {
const name = util.getSystemErrorName(err.errno)
console.error(name) // ENOENT
})
util.getSystemErrorMap()
추가된 버전: v16.0.0, v14.17.0
- 반환값: <Map>
Node.js API에서 사용 가능한 모든 시스템 오류 코드의 맵을 반환합니다. 오류 코드와 오류 이름 간의 매핑은 플랫폼에 따라 다릅니다. 일반 오류 이름은 일반 시스템 오류를 참조하세요.
fs.access('file/that/does/not/exist', err => {
const errorMap = util.getSystemErrorMap()
const name = errorMap.get(err.errno)
console.error(name) // ENOENT
})
util.getSystemErrorMessage(err)
추가된 버전: v23.1.0
Node.js API에서 온 숫자 오류 코드에 대한 문자열 메시지를 반환합니다. 오류 코드와 문자열 메시지 간의 매핑은 플랫폼에 따라 다릅니다.
fs.access('file/that/does/not/exist', err => {
const name = util.getSystemErrorMessage(err.errno)
console.error(name) // No such file or directory
})
util.inherits(constructor, superConstructor)
[연혁]
버전 | 변경 사항 |
---|---|
v5.0.0 | constructor 매개변수가 이제 ES6 클래스를 참조할 수 있습니다. |
v0.3.0 | 추가된 버전: v0.3.0 |
constructor
<Function>superConstructor
<Function>
util.inherits()
의 사용은 권장되지 않습니다. 언어 수준의 상속 지원을 받으려면 ES6 class
와 extends
키워드를 사용하십시오. 또한 두 스타일이 의미적으로 호환되지 않음을 참고하십시오.
한 생성자에서 다른 생성자로 프로토타입 메서드를 상속합니다. constructor
의 프로토타입은 superConstructor
에서 생성된 새 객체로 설정됩니다.
이것은 주로 Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)
위에 몇 가지 입력 유효성 검사를 추가합니다. 추가 편의를 위해 superConstructor
는 constructor.super_
속성을 통해 액세스할 수 있습니다.
const util = require('node:util')
const EventEmitter = require('node:events')
function MyStream() {
EventEmitter.call(this)
}
util.inherits(MyStream, EventEmitter)
MyStream.prototype.write = function (data) {
this.emit('data', data)
}
const stream = new MyStream()
console.log(stream instanceof EventEmitter) // true
console.log(MyStream.super_ === EventEmitter) // true
stream.on('data', data => {
console.log(`Received data: "${data}"`)
})
stream.write('It works!') // Received data: "It works!"
class
와 extends
를 사용하는 ES6 예시:
const EventEmitter = require('node:events')
class MyStream extends EventEmitter {
write(data) {
this.emit('data', data)
}
}
const stream = new MyStream()
stream.on('data', data => {
console.log(`Received data: "${data}"`)
})
stream.write('With ES6')
util.inspect(object[, options])
util.inspect(object[, showHidden[, depth[, colors]]])
[History]
버전 | 변경 사항 |
---|---|
v16.18.0 | Set 및 Map 검사 시 maxArrayLength 에 대한 지원이 추가되었습니다. |
v17.3.0, v16.14.0 | 이제 numericSeparator 옵션이 지원됩니다. |
v13.0.0 | 순환 참조는 이제 참조에 대한 마커를 포함합니다. |
v14.6.0, v12.19.0 | 이제 object 가 다른 vm.Context 에서 온 경우, 사용자 지정 검사 함수는 컨텍스트 관련 인수를 더 이상 받지 않습니다. |
v13.13.0, v12.17.0 | 이제 maxStringLength 옵션이 지원됩니다. |
v13.5.0, v12.16.0 | showHidden 이 true 인 경우 사용자 정의 프로토타입 속성이 검사됩니다. |
v12.0.0 | compact 옵션 기본값이 3 으로 변경되었고 breakLength 옵션 기본값이 80 으로 변경되었습니다. |
v12.0.0 | 사용자 지정 검사 함수의 컨텍스트 인수에 내부 속성이 더 이상 나타나지 않습니다. |
v11.11.0 | compact 옵션은 새 출력 모드에 대한 숫자를 허용합니다. |
v11.7.0 | 이제 ArrayBuffer는 바이너리 내용도 표시합니다. |
v11.5.0 | 이제 getters 옵션이 지원됩니다. |
v11.4.0 | depth 기본값이 다시 2 로 변경되었습니다. |
v11.0.0 | depth 기본값이 20 으로 변경되었습니다. |
v11.0.0 | 검사 출력은 이제 약 128MiB로 제한됩니다. 이 크기를 초과하는 데이터는 완전히 검사되지 않습니다. |
v10.12.0 | 이제 sorted 옵션이 지원됩니다. |
v10.6.0 | 연결 리스트와 유사한 객체를 이제 최대 호출 스택 크기까지 검사할 수 있습니다. |
v10.0.0 | 이제 WeakMap 및 WeakSet 항목도 검사할 수 있습니다. |
v9.9.0 | 이제 compact 옵션이 지원됩니다. |
v6.6.0 | 사용자 지정 검사 함수가 이제 this 를 반환할 수 있습니다. |
v6.3.0 | 이제 breakLength 옵션이 지원됩니다. |
v6.1.0 | 이제 maxArrayLength 옵션이 지원됩니다. 특히 긴 배열은 기본적으로 잘립니다. |
v6.1.0 | 이제 showProxy 옵션이 지원됩니다. |
v0.3.0 | v0.3.0에서 추가됨 |
object
<any> 모든 JavaScript 기본 또는Object
.options
<Object>showHidden
<boolean>true
이면object
의 열거할 수 없는 심볼과 속성이 포맷된 결과에 포함됩니다.WeakMap
및WeakSet
항목과 사용자 정의 프로토타입 속성(메서드 속성 제외)도 포함됩니다. 기본값:false
.depth
<number>object
을 포맷하는 동안 재귀할 횟수를 지정합니다. 이는 큰 객체를 검사하는 데 유용합니다. 최대 호출 스택 크기까지 재귀하려면Infinity
또는null
을 전달합니다. 기본값:2
.colors
<boolean>true
이면 출력이 ANSI 색상 코드로 스타일이 지정됩니다. 색상을 사용자 지정할 수 있습니다. Customizingutil.inspect
colors을 참조하십시오. 기본값:false
.customInspect
<boolean>false
이면[util.inspect.custom](depth, opts, inspect)
함수가 호출되지 않습니다. 기본값:true
.showProxy
<boolean>true
이면Proxy
검사에target
및handler
객체가 포함됩니다. 기본값:false
.maxArrayLength
<integer> 포맷 시 포함할Array
,TypedArray
,Map
,Set
,WeakMap
및WeakSet
요소의 최대 개수를 지정합니다. 모든 요소를 표시하려면null
또는Infinity
로 설정합니다. 요소를 표시하지 않으려면0
또는 음수로 설정합니다. 기본값:100
.maxStringLength
<integer> 포맷 시 포함할 최대 문자 수를 지정합니다. 모든 요소를 표시하려면null
또는Infinity
로 설정합니다. 문자를 표시하지 않으려면0
또는 음수로 설정합니다. 기본값:10000
.breakLength
<integer> 입력 값이 여러 줄로 분할되는 길이를 지정합니다. 입력을 단일 행으로 포맷하려면Infinity
로 설정합니다(숫자 >=1
로 설정된compact
와 조합). 기본값:80
.compact
<boolean> | <integer> 이를false
로 설정하면 각 객체 키가 새 줄에 표시됩니다.breakLength
보다 긴 텍스트에서 새 줄이 생깁니다. 숫자로 설정하면 모든 속성이breakLength
에 맞으면 가장 안쪽n
개의 요소가 단일 행에 통합됩니다. 짧은 배열 요소도 함께 그룹화됩니다. 자세한 내용은 아래 예제를 참조하십시오. 기본값:3
.sorted
<boolean> | <Function>true
또는 함수로 설정하면 객체의 모든 속성과Set
및Map
항목이 결과 문자열에서 정렬됩니다.true
로 설정하면 기본 정렬이 사용됩니다. 함수로 설정하면 비교 함수로 사용됩니다.getters
<boolean> | <string>true
로 설정하면 getter가 검사됩니다.'get'
으로 설정하면 해당 setter가 없는 getter만 검사됩니다.'set'
으로 설정하면 해당 setter가 있는 getter만 검사됩니다. 이는 getter 함수에 따라 부작용을 일으킬 수 있습니다. 기본값:false
.numericSeparator
<boolean>true
로 설정하면 모든 bigint 및 숫자에서 매 세 자리마다 밑줄이 사용됩니다. 기본값:false
.
반환 값: <string>
object
의 표현입니다.
util.inspect()
메서드는 디버깅을 위한 object
의 문자열 표현을 반환합니다. util.inspect
의 출력은 언제든지 변경될 수 있으며 프로그래밍 방식으로 의존해서는 안 됩니다. 결과를 변경하는 추가 options
가 전달될 수 있습니다. util.inspect()
는 검사된 값에 대한 식별 가능한 태그를 만들기 위해 생성자의 이름 및/또는 @@toStringTag
를 사용합니다.
class Foo {
get [Symbol.toStringTag]() {
return 'bar'
}
}
class Bar {}
const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } })
util.inspect(new Foo()) // 'Foo [bar] {}'
util.inspect(new Bar()) // 'Bar {}'
util.inspect(baz) // '[foo] {}'
순환 참조는 참조 인덱스를 사용하여 앵커를 가리킵니다.
const { inspect } = require('node:util')
const obj = {}
obj.a = [obj]
obj.b = {}
obj.b.inner = obj.b
obj.b.obj = obj
console.log(inspect(obj))
// <ref *1> {
// a: [ [Circular *1] ],
// b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }
다음 예제는 util
객체의 모든 속성을 검사합니다.
const util = require('node:util')
console.log(util.inspect(util, { showHidden: true, depth: null }))
다음 예제는 compact
옵션의 효과를 강조 표시합니다.
const util = require('node:util')
const o = {
a: [
1,
2,
[
[
'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
'test',
'foo',
],
],
4,
],
b: new Map([
['za', 1],
['zb', 'test'],
]),
}
console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }))
// { a:
// [ 1,
// 2,
// [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // 긴 줄
// 'test',
// 'foo' ] ],
// 4 ],
// b: Map(2) { 'za' => 1, 'zb' => 'test' } }
// `compact`를 false 또는 정수로 설정하면 더 읽기 쉬운 출력이 생성됩니다.
console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }))
// {
// a: [
// 1,
// 2,
// [
// [
// 'Lorem ipsum dolor sit amet,\n' +
// 'consectetur adipiscing elit, sed do eiusmod \n' +
// 'tempor incididunt ut labore et dolore magna aliqua.',
// 'test',
// 'foo'
// ]
// ],
// 4
// ],
// b: Map(2) {
// 'za' => 1,
// 'zb' => 'test'
// }
// }
// `breakLength`를 예를 들어 150으로 설정하면 "Lorem ipsum" 텍스트가
// 단일 행으로 출력됩니다.
showHidden
옵션을 사용하면 WeakMap
및 WeakSet
항목을 검사할 수 있습니다. maxArrayLength
보다 많은 항목이 있는 경우 어떤 항목이 표시되는지 보장되지 않습니다. 즉, 동일한 WeakSet
항목을 두 번 검색하면 다른 출력이 생성될 수 있습니다. 또한 남아 있는 강력한 참조가 없는 항목은 언제든지 가비지 수집될 수 있습니다.
const { inspect } = require('node:util')
const obj = { a: 1 }
const obj2 = { b: 2 }
const weakSet = new WeakSet([obj, obj2])
console.log(inspect(weakSet, { showHidden: true }))
// WeakSet { { a: 1 }, { b: 2 } }
sorted
옵션은 객체의 속성 삽입 순서가 util.inspect()
결과에 영향을 미치지 않도록 합니다.
const { inspect } = require('node:util')
const assert = require('node:assert')
const o1 = {
b: [2, 3, 1],
a: '`a` comes before `b`',
c: new Set([2, 3, 1]),
}
console.log(inspect(o1, { sorted: true }))
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }))
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }
const o2 = {
c: new Set([2, 1, 3]),
a: '`a` comes before `b`',
b: [2, 3, 1],
}
assert.strict.equal(inspect(o1, { sorted: true }), inspect(o2, { sorted: true }))
numericSeparator
옵션은 모든 숫자에 매 세 자리마다 밑줄을 추가합니다.
const { inspect } = require('node:util')
const thousand = 1_000
const million = 1_000_000
const bigNumber = 123_456_789n
const bigDecimal = 1_234.123_45
console.log(inspect(thousand, { numericSeparator: true }))
// 1_000
console.log(inspect(million, { numericSeparator: true }))
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }))
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }))
// 1_234.123_45
util.inspect()
는 디버깅을 위한 동기식 메서드입니다. 최대 출력 길이는 약 128MiB입니다. 더 긴 출력을 생성하는 입력은 잘립니다.
util.inspect
색상 사용자 정의
util.inspect
의 색상 출력(활성화된 경우)은 util.inspect.styles
및 util.inspect.colors
속성을 통해 전역적으로 사용자 정의할 수 있습니다.
util.inspect.styles
는 스타일 이름을 util.inspect.colors
의 색상에 연결하는 맵입니다.
기본 스타일 및 연결된 색상은 다음과 같습니다.
bigint
:yellow
boolean
:yellow
date
:magenta
module
:underline
name
: (스타일 없음)null
:bold
number
:yellow
regexp
:red
special
:cyan
(예:Proxies
)string
:green
symbol
:green
undefined
:grey
색상 스타일 지정은 모든 터미널에서 지원되지 않을 수 있는 ANSI 제어 코드를 사용합니다. 색상 지원을 확인하려면 tty.hasColors()
를 사용하세요.
미리 정의된 제어 코드는 아래에 나열되어 있습니다("수정자", "전경색" 및 "배경색"으로 그룹화됨).
수정자
수정자 지원은 터미널마다 다릅니다. 지원되지 않는 경우 대부분 무시됩니다.
reset
- 모든 (색상) 수정자를 기본값으로 재설정합니다.- bold - 텍스트를 굵게 만듭니다.
- italic - 텍스트를 기울임꼴로 만듭니다.
- underline - 텍스트에 밑줄을 긋습니다.
strikethrough- 텍스트 중앙에 가로선을 넣습니다(별칭:strikeThrough
,crossedout
,crossedOut
).hidden
- 텍스트를 인쇄하지만 보이지 않게 만듭니다(별칭: 숨기기).- dim - 색상 강도를 낮춥니다(별칭:
faint
). - overlined - 텍스트에 오버라인을 만듭니다.
- blink - 일정한 간격으로 텍스트를 숨겼다 표시합니다.
- inverse - 전경색과 배경색을 바꿉니다(별칭:
swapcolors
,swapColors
). - doubleunderline - 텍스트에 이중 밑줄을 만듭니다(별칭:
doubleUnderline
). - framed - 텍스트 주위에 프레임을 그립니다.
전경색
black
red
green
yellow
blue
magenta
cyan
white
gray
(별칭:grey
,blackBright
)redBright
greenBright
yellowBright
blueBright
magentaBright
cyanBright
whiteBright
배경색
bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite
bgGray
(별칭:bgGrey
,bgBlackBright
)bgRedBright
bgGreenBright
bgYellowBright
bgBlueBright
bgMagentaBright
bgCyanBright
bgWhiteBright
객체에 대한 사용자 정의 검사 함수
[기록]
버전 | 변경 사항 |
---|---|
v17.3.0, v16.14.0 | inspect 인수가 상호 운용성을 높이기 위해 추가되었습니다. |
v0.1.97 | 추가됨: v0.1.97 |
객체는 자체 [util.inspect.custom](depth, opts, inspect)
함수를 정의할 수도 있습니다. 이 함수는 util.inspect()
가 객체를 검사할 때 호출하고 그 결과를 사용합니다.
const util = require('node:util')
class Box {
constructor(value) {
this.value = value
}
[util.inspect.custom](depth, options, inspect) {
if (depth < 0) {
return options.stylize('[Box]', 'special')
}
const newOptions = Object.assign({}, options, {
depth: options.depth === null ? null : options.depth - 1,
})
// "Box< "의 크기이기 때문에 5개의 공백으로 패딩합니다.
const padding = ' '.repeat(5)
const inner = inspect(this.value, newOptions).replace(/\n/g, `\n${padding}`)
return `${options.stylize('Box', 'special')}< ${inner} >`
}
}
const box = new Box(true)
util.inspect(box)
// 반환 값: "Box< true >"
사용자 정의 [util.inspect.custom](depth, opts, inspect)
함수는 일반적으로 문자열을 반환하지만 util.inspect()
에서 적절하게 포맷할 모든 유형의 값을 반환할 수 있습니다.
const util = require('node:util')
const obj = { foo: '이것은 inspect() 출력에 표시되지 않습니다.' }
obj[util.inspect.custom] = depth => {
return { bar: 'baz' }
}
util.inspect(obj)
// 반환 값: "{ bar: 'baz' }"
util.inspect.custom
[기록]
버전 | 변경 사항 |
---|---|
v10.12.0 | 이제 이것은 공유 심볼로 정의됩니다. |
v6.6.0 | 추가됨: v6.6.0 |
- 사용자 정의 검사 함수를 선언하는 데 사용할 수 있는 <symbol>.
util.inspect.custom
을 통해 접근할 수 있는 것 외에도 이 심볼은 전역적으로 등록되어 있으며 Symbol.for('nodejs.util.inspect.custom')
으로 모든 환경에서 접근할 수 있습니다.
이렇게 하면 코드를 이식 가능한 방식으로 작성할 수 있으므로 사용자 정의 검사 함수는 Node.js 환경에서 사용되고 브라우저에서는 무시됩니다. util.inspect()
함수 자체는 추가 이식성을 위해 사용자 정의 검사 함수에 세 번째 인수로 전달됩니다.
const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')
class Password {
constructor(value) {
this.value = value
}
toString() {
return 'xxxxxxxx'
}
[customInspectSymbol](depth, inspectOptions, inspect) {
return `Password <${this.toString()}>`
}
}
const password = new Password('r0sebud')
console.log(password)
// 출력: Password <xxxxxxxx>
자세한 내용은 객체에 대한 사용자 정의 검사 함수를 참조하세요.
util.inspect.defaultOptions
추가된 버전: v6.4.0
defaultOptions
값은 util.inspect
에서 사용되는 기본 옵션을 사용자 정의할 수 있도록 합니다. 이는 암시적으로 util.inspect
를 호출하는 console.log
또는 util.format
과 같은 함수에 유용합니다. 이는 하나 이상의 유효한 util.inspect()
옵션이 포함된 객체로 설정해야 합니다. 옵션 속성을 직접 설정하는 것도 지원됩니다.
const util = require('node:util')
const arr = Array(101).fill(0)
console.log(arr) // 잘린 배열을 기록합니다
util.inspect.defaultOptions.maxArrayLength = null
console.log(arr) // 전체 배열을 기록합니다
util.isDeepStrictEqual(val1, val2)
추가된 버전: v9.0.0
val1
과 val2
사이에 깊은 엄격한 동등성이 있으면 true
를 반환합니다. 그렇지 않으면 false
를 반환합니다.
깊은 엄격한 동등성에 대한 자세한 내용은 assert.deepStrictEqual()
을 참조하십시오.
Class: util.MIMEType
추가된 버전: v19.1.0, v18.13.0
MIMEType 클래스의 구현입니다.
브라우저 규칙에 따라 MIMEType
객체의 모든 속성은 객체 자체의 데이터 속성이 아니라 클래스 프로토타입의 getter 및 setter로 구현됩니다.
MIME 문자열은 여러 개의 의미있는 구성 요소를 포함하는 구조화된 문자열입니다. 구문 분석되면 이러한 각 구성 요소에 대한 속성을 포함하는 MIMEType
객체가 반환됩니다.
생성자: new MIMEType(input)
input
<string> 구문 분석할 입력 MIME
input
을 구문 분석하여 새로운 MIMEType
객체를 만듭니다.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/plain')
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/plain')
input
이 유효한 MIME이 아니면 TypeError
가 발생합니다. 주어진 값을 문자열로 강제 변환하려는 노력이 이루어집니다. 예를 들어:
import { MIMEType } from 'node:util'
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// 출력: text/plain
const { MIMEType } = require('node:util')
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// 출력: text/plain
mime.type
MIME의 type 부분을 가져오고 설정합니다.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// Prints: text
myMIME.type = 'application'
console.log(myMIME.type)
// Prints: application
console.log(String(myMIME))
// Prints: application/javascript
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// Prints: text
myMIME.type = 'application'
console.log(myMIME.type)
// Prints: application
console.log(String(myMIME))
// Prints: application/javascript
mime.subtype
MIME의 subtype 부분을 가져오고 설정합니다.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// Prints: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// Prints: javascript
console.log(String(myMIME))
// Prints: text/javascript
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// Prints: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// Prints: javascript
console.log(String(myMIME))
// Prints: text/javascript
mime.essence
MIME의 essence를 가져옵니다. 이 속성은 읽기 전용입니다. MIME을 변경하려면 mime.type
또는 mime.subtype
을 사용하세요.
import { MIMEType } from 'node:util'
const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// Prints: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// Prints: application/javascript
console.log(String(myMIME))
// Prints: application/javascript;key=value
const { MIMEType } = require('node:util')
const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// Prints: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// Prints: application/javascript
console.log(String(myMIME))
// Prints: application/javascript;key=value
mime.params
MIME의 매개변수를 나타내는 MIMEParams
객체를 가져옵니다. 이 속성은 읽기 전용입니다. 자세한 내용은 MIMEParams
문서를 참조하세요.
mime.toString()
- 반환: <string>
MIMEType
객체의 toString()
메서드는 직렬화된 MIME을 반환합니다.
표준 준수의 필요성으로 인해 이 메서드는 사용자가 MIME의 직렬화 프로세스를 사용자 지정할 수 없습니다.
mime.toJSON()
- 반환: <string>
mime.toString()
의 별칭입니다.
이 메서드는 MIMEType
객체가 JSON.stringify()
로 직렬화될 때 자동으로 호출됩니다.
import { MIMEType } from 'node:util'
const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]
const { MIMEType } = require('node:util')
const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]
클래스: util.MIMEParams
추가된 버전: v19.1.0, v18.13.0
MIMEParams
API는 MIMEType
의 매개변수에 대한 읽기 및 쓰기 액세스를 제공합니다.
생성자: new MIMEParams()
빈 매개변수로 새 MIMEParams
객체를 만듭니다.
import { MIMEParams } from 'node:util'
const myParams = new MIMEParams()
const { MIMEParams } = require('node:util')
const myParams = new MIMEParams()
mimeParams.delete(name)
name
<string>
이름이 name
인 모든 이름-값 쌍을 제거합니다.
mimeParams.entries()
- 반환값: <Iterator>
매개변수 내 각 이름-값 쌍에 대한 이터레이터를 반환합니다. 이터레이터의 각 항목은 JavaScript Array
입니다. 배열의 첫 번째 항목은 name
이고, 두 번째 항목은 value
입니다.
mimeParams.get(name)
이름이 name
인 첫 번째 이름-값 쌍의 값을 반환합니다. 그러한 쌍이 없으면 null
이 반환됩니다.
mimeParams.has(name)
이름이 name
인 이름-값 쌍이 하나 이상 있으면 true
를 반환합니다.
mimeParams.keys()
- 반환값: <Iterator>
각 이름-값 쌍의 이름에 대한 이터레이터를 반환합니다.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
console.log(name)
}
// 출력:
// foo
// bar
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
console.log(name)
}
// 출력:
// foo
// bar
mimeParams.set(name, value)
name
과 연결된 MIMEParams
객체의 값을 value
로 설정합니다. 이름이 name
인 기존의 이름-값 쌍이 있으면, 첫 번째 쌍의 값을 value
로 설정합니다.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// 출력: foo=def;bar=1;baz=xyz
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// 출력: foo=def;bar=1;baz=xyz
mimeParams.values()
- 반환값: <Iterator>
각 이름-값 쌍의 값에 대한 이터레이터를 반환합니다.
mimeParams[@@iterator]()
- 반환값: <Iterator>
mimeParams.entries()
의 별칭입니다.
import { MIMEType } from 'node:util'
const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
console.log(name, value)
}
// 출력:
// foo bar
// xyz baz
const { MIMEType } = require('node:util')
const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
console.log(name, value)
}
// 출력:
// foo bar
// xyz baz
util.parseArgs([config])
[기록]
버전 | 변경 사항 |
---|---|
v22.4.0, v20.16.0 | 입력 config 에서 음수 옵션 허용에 대한 지원을 추가했습니다. |
v20.0.0 | API가 더 이상 실험적이지 않습니다. |
v18.11.0, v16.19.0 | 입력 config 에 기본값에 대한 지원을 추가했습니다. |
v18.7.0, v16.17.0 | 입력 config 및 반환된 속성에서 tokens 를 사용하여 자세한 구문 분석 정보를 반환하는 데 대한 지원을 추가했습니다. |
v18.3.0, v16.17.0 | 추가됨: v18.3.0, v16.17.0 |
config
<Object> 구문 분석에 대한 인수를 제공하고 구문 분석기를 구성하는 데 사용됩니다.config
는 다음 속성을 지원합니다.args
<string[]> 인수 문자열의 배열. 기본값:execPath
및filename
이 제거된process.argv
.options
<Object> 구문 분석기에 알려진 인수를 설명하는 데 사용됩니다.options
의 키는 옵션의 긴 이름이고 값은 다음 속성을 허용하는 <Object>입니다.type
<string> 인수의 유형으로boolean
또는string
이어야 합니다.multiple
<boolean> 이 옵션을 여러 번 제공할 수 있는지 여부.true
인 경우 모든 값이 배열에 수집됩니다.false
인 경우 옵션 값은 마지막 값이 우선합니다. 기본값:false
.short
<string> 옵션에 대한 단일 문자 별칭.default
<string> | <boolean> | <string[]> | <boolean[]> 인수로 설정되지 않은 경우의 기본 옵션 값입니다.type
속성과 동일한 유형이어야 합니다.multiple
이true
인 경우 배열이어야 합니다.strict
<boolean> 알 수 없는 인수가 발생하거나options
에 구성된type
과 일치하지 않는 인수가 전달될 때 오류를 발생시켜야 하는지 여부입니다. 기본값:true
.allowPositionals
<boolean> 이 명령이 위치 인수를 허용하는지 여부입니다.strict
가true
인 경우 기본값:false
, 그렇지 않으면true
.allowNegative
<boolean>true
인 경우 옵션 이름 앞에--no-
를 붙여 부울 옵션을false
로 명시적으로 설정할 수 있습니다. 기본값:false
.tokens
<boolean> 구문 분석된 토큰을 반환합니다. 이는 추가 검사를 추가하는 것부터 토큰을 다른 방식으로 재처리하는 것까지 내장된 동작을 확장하는 데 유용합니다. 기본값:false
.
- 반환값: <Object> 구문 분석된 명령줄 인수:
values
<Object> 구문 분석된 옵션 이름과 <string> 또는 <boolean> 값의 매핑.positionals
<string[]> 위치 인수.tokens
<Object[]> | <undefined> parseArgs 토큰 섹션을 참조하십시오.config
에tokens: true
가 포함된 경우에만 반환됩니다.
process.argv
와 직접 상호 작용하는 것보다 명령줄 인수 구문 분석을 위한 더 높은 수준의 API를 제공합니다. 예상 인수에 대한 사양을 가져와 구문 분석된 옵션과 위치를 포함하는 구조화된 객체를 반환합니다.
import { parseArgs } from 'node:util'
const args = ['-f', '--bar', 'b']
const options = {
foo: {
type: 'boolean',
short: 'f',
},
bar: {
type: 'string',
},
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// 출력: [Object: null prototype] { foo: true, bar: 'b' } []
const { parseArgs } = require('node:util')
const args = ['-f', '--bar', 'b']
const options = {
foo: {
type: 'boolean',
short: 'f',
},
bar: {
type: 'string',
},
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// 출력: [Object: null prototype] { foo: true, bar: 'b' } []
parseArgs
토큰
구성에서 tokens: true
를 지정하여 사용자 정의 동작을 추가하는 데 사용할 수 있는 자세한 구문 분석 정보가 제공됩니다. 반환된 토큰에는 다음을 설명하는 속성이 있습니다.
모든 토큰
옵션 토큰
name
<string> 옵션의 긴 이름입니다.rawName
<string>--foo
의-f
와 같이 args에서 사용된 옵션입니다.value
<string> | <undefined> args에 지정된 옵션 값입니다. 부울 옵션의 경우 정의되지 않습니다.inlineValue
<boolean> | <undefined>--foo=bar
와 같이 옵션 값이 인라인으로 지정되었는지 여부입니다.
위치 토큰
value
<string> args의 위치 인수의 값입니다(예:args[index]
).
옵션 종료자 토큰
반환된 토큰은 입력 args에서 발견된 순서대로 정렬됩니다. args에 여러 번 나타나는 옵션은 각 사용에 대해 토큰을 생성합니다. -xy
와 같은 짧은 옵션 그룹은 각 옵션에 대한 토큰으로 확장됩니다. 따라서 -xxx
는 세 개의 토큰을 생성합니다.
예를 들어 --no-color
와 같은 부정된 옵션(옵션이 boolean
유형일 때 allowNegative
가 지원함)에 대한 지원을 추가하려면 반환된 토큰을 다시 처리하여 부정된 옵션에 대해 저장된 값을 변경할 수 있습니다.
import { parseArgs } from 'node:util'
const options = {
color: { type: 'boolean' },
'no-color': { type: 'boolean' },
logfile: { type: 'string' },
'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })
// 옵션 토큰을 다시 처리하고 반환된 값을 덮어씁니다.
tokens
.filter(token => token.kind === 'option')
.forEach(token => {
if (token.name.startsWith('no-')) {
// --no-foo에 대해 foo:false를 저장합니다.
const positiveName = token.name.slice(3)
values[positiveName] = false
delete values[token.name]
} else {
// --foo 및 --no-foo 둘 다 있는 경우 마지막 항목이 우선되도록 값을 다시 저장합니다.
values[token.name] = token.value ?? true
}
})
const color = values.color
const logfile = values.logfile ?? 'default.log'
console.log({ logfile, color })
const { parseArgs } = require('node:util')
const options = {
color: { type: 'boolean' },
'no-color': { type: 'boolean' },
logfile: { type: 'string' },
'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })
// 옵션 토큰을 다시 처리하고 반환된 값을 덮어씁니다.
tokens
.filter(token => token.kind === 'option')
.forEach(token => {
if (token.name.startsWith('no-')) {
// --no-foo에 대해 foo:false를 저장합니다.
const positiveName = token.name.slice(3)
values[positiveName] = false
delete values[token.name]
} else {
// --foo 및 --no-foo 둘 다 있는 경우 마지막 항목이 우선되도록 값을 다시 저장합니다.
values[token.name] = token.value ?? true
}
})
const color = values.color
const logfile = values.logfile ?? 'default.log'
console.log({ logfile, color })
부정된 옵션과 옵션을 여러 가지 방법으로 사용하는 경우 마지막 항목이 우선되는 예시 사용법입니다.
$ node negate.js
{ logfile: 'default.log', color: undefined }
$ node negate.js --no-logfile --no-color
{ logfile: false, color: false }
$ node negate.js --logfile=test.log --color
{ logfile: 'test.log', color: true }
$ node negate.js --no-logfile --logfile=test.log --color --no-color
{ logfile: 'test.log', color: false }
util.parseEnv(content)
추가된 버전: v21.7.0, v20.12.0
content
<string>
.env
파일의 원시 내용입니다.
- 반환값: <Object>
다음과 같은 .env
파일 예시가 주어졌을 때:
const { parseEnv } = require('node:util')
parseEnv('HELLO=world\nHELLO=oh my\n')
// 반환값: { HELLO: 'oh my' }
import { parseEnv } from 'node:util'
parseEnv('HELLO=world\nHELLO=oh my\n')
// 반환값: { HELLO: 'oh my' }
util.promisify(original)
[History]
버전 | 변경 사항 |
---|---|
v20.8.0 | Promise 를 반환하는 함수에서 promisify 를 호출하는 것은 더 이상 사용되지 않습니다. |
v8.0.0 | 추가된 버전: v8.0.0 |
original
<Function>- 반환값: <Function>
일반적인 오류 우선 콜백 스타일, 즉 마지막 인수로 (err, value) => ...
콜백을 사용하는 함수를 받아들이고 프라미스를 반환하는 버전으로 반환합니다.
const util = require('node:util')
const fs = require('node:fs')
const stat = util.promisify(fs.stat)
stat('.')
.then(stats => {
// `stats`로 무언가를 수행합니다.
})
.catch(error => {
// 오류를 처리합니다.
})
또는 async function
을 사용하여 동등하게 표현할 수 있습니다.
const util = require('node:util')
const fs = require('node:fs')
const stat = util.promisify(fs.stat)
async function callStat() {
const stats = await stat('.')
console.log(`이 디렉터리는 ${stats.uid} 소유입니다.`)
}
callStat()
original[util.promisify.custom]
속성이 있는 경우, promisify
는 해당 값을 반환합니다. 사용자 정의 프로미스화 함수를 참조하십시오.
promisify()
는 모든 경우에 original
이 마지막 인수로 콜백을 사용하는 함수라고 가정합니다. original
이 함수가 아니면 promisify()
는 오류를 발생시킵니다. original
이 함수이지만 마지막 인수가 오류 우선 콜백이 아닌 경우에도 오류 우선 콜백이 마지막 인수로 전달됩니다.
this
를 사용하는 클래스 메서드 또는 다른 메서드에서 promisify()
를 사용하는 것은 특별히 처리하지 않는 한 예상대로 작동하지 않을 수 있습니다.
const util = require('node:util')
class Foo {
constructor() {
this.a = 42
}
bar(callback) {
callback(null, this.a)
}
}
const foo = new Foo()
const naiveBar = util.promisify(foo.bar)
// TypeError: 정의되지 않은 속성 'a'를 읽을 수 없습니다.
// naiveBar().then(a => console.log(a));
naiveBar.call(foo).then(a => console.log(a)) // '42'
const bindBar = naiveBar.bind(foo)
bindBar().then(a => console.log(a)) // '42'
사용자 정의 프로미스화 함수
util.promisify.custom
심볼을 사용하여 util.promisify()
의 반환 값을 오버라이드할 수 있습니다.
const util = require('node:util')
function doSomething(foo, callback) {
// ...
}
doSomething[util.promisify.custom] = foo => {
return getPromiseSomehow()
}
const promisified = util.promisify(doSomething)
console.log(promisified === doSomething[util.promisify.custom])
// 'true'를 출력합니다.
이는 원래 함수가 오류 우선 콜백을 마지막 인수로 사용하는 표준 형식을 따르지 않는 경우에 유용할 수 있습니다.
예를 들어 (foo, onSuccessCallback, onErrorCallback)
을 인수로 사용하는 함수의 경우:
doSomething[util.promisify.custom] = foo => {
return new Promise((resolve, reject) => {
doSomething(foo, resolve, reject)
})
}
promisify.custom
이 정의되어 있지만 함수가 아닌 경우, promisify()
는 오류를 발생시킵니다.
util.promisify.custom
[히스토리]
버전 | 변경 사항 |
---|---|
v13.12.0, v12.16.2 | 이제 공유 심볼로 정의됩니다. |
v8.0.0 | v8.0.0에서 추가됨 |
- 사용자 정의 프로미스화된 함수 변형을 선언하는 데 사용할 수 있는 <symbol>입니다. 사용자 정의 프로미스화 함수를 참조하세요.
util.promisify.custom
을 통해 액세스할 수 있을 뿐만 아니라 이 심볼은 전역적으로 등록되어 있으며 모든 환경에서 Symbol.for('nodejs.util.promisify.custom')
으로 액세스할 수 있습니다.
예를 들어 (foo, onSuccessCallback, onErrorCallback)
을 인수로 사용하는 함수의 경우:
const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom')
doSomething[kCustomPromisifiedSymbol] = foo => {
return new Promise((resolve, reject) => {
doSomething(foo, resolve, reject)
})
}
util.stripVTControlCharacters(str)
추가된 버전: v16.11.0
str
에서 모든 ANSI 이스케이프 코드를 제거한 값을 반환합니다.
console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'))
// "value" 출력
util.styleText(format, text[, options])
[기록]
버전 | 변경 사항 |
---|---|
v23.5.0 | styleText가 이제 안정화되었습니다. |
v22.8.0, v20.18.0 | isTTY 및 NO_COLORS, NODE_DISABLE_COLORS, FORCE_COLOR와 같은 환경 변수를 고려합니다. |
v21.7.0, v20.12.0 | 추가됨: v21.7.0, v20.12.0 |
format
<string> | <Array>util.inspect.colors
에 정의된 텍스트 형식 또는 텍스트 형식의 배열입니다.text
<string> 서식을 지정할 텍스트입니다.options
<Object>
이 함수는 터미널에 출력할 때 전달된 format
을 고려하여 서식이 지정된 텍스트를 반환합니다. 터미널의 기능을 인식하고 NO_COLORS
, NODE_DISABLE_COLORS
, FORCE_COLOR
환경 변수를 통해 설정된 구성에 따라 작동합니다.
import { styleText } from 'node:util'
import { stderr } from 'node:process'
const successMessage = styleText('green', '성공!')
console.log(successMessage)
const errorMessage = styleText(
'red',
'오류! 오류!',
// process.stderr에 TTY가 있는지 확인
{ stream: stderr }
)
console.error(successMessage)
const { styleText } = require('node:util')
const { stderr } = require('node:process')
const successMessage = styleText('green', '성공!')
console.log(successMessage)
const errorMessage = styleText(
'red',
'오류! 오류!',
// process.stderr에 TTY가 있는지 확인
{ stream: stderr }
)
console.error(successMessage)
util.inspect.colors
는 italic
및 underline
과 같은 텍스트 형식도 제공하며 둘 다 결합할 수 있습니다.
console.log(util.styleText(['underline', 'italic'], '내 이탤릭체 밑줄 메시지'))
형식 배열을 전달할 때, 적용되는 형식의 순서는 왼쪽에서 오른쪽이므로 다음 스타일은 이전 스타일을 덮어쓸 수 있습니다.
console.log(
util.styleText(['red', 'green'], '텍스트') // 녹색
)
전체 형식 목록은 수정자에서 확인할 수 있습니다.
클래스: util.TextDecoder
[기록]
버전 | 변경 사항 |
---|---|
v11.0.0 | 이제 클래스를 전역 객체에서 사용할 수 있습니다. |
v8.3.0 | v8.3.0에 추가됨 |
WHATWG 인코딩 표준 TextDecoder
API의 구현입니다.
const decoder = new TextDecoder()
const u8arr = new Uint8Array([72, 101, 108, 108, 111])
console.log(decoder.decode(u8arr)) // Hello
WHATWG 지원 인코딩
WHATWG 인코딩 표준에 따라 TextDecoder
API에서 지원하는 인코딩은 아래 표에 나와 있습니다. 각 인코딩에 대해 하나 이상의 별칭을 사용할 수 있습니다.
Node.js 빌드 구성에 따라 지원하는 인코딩 집합이 다릅니다. (국제화 참조)
기본적으로 지원되는 인코딩(전체 ICU 데이터 포함)
인코딩 | 별칭 |
---|---|
'ibm866' | '866' , 'cp866' , 'csibm866' |
'iso-8859-2' | 'csisolatin2' , 'iso-ir-101' , 'iso8859-2' , 'iso88592' , 'iso_8859-2' , 'iso_8859-2:1987' , 'l2' , 'latin2' |
'iso-8859-3' | 'csisolatin3' , 'iso-ir-109' , 'iso8859-3' , 'iso88593' , 'iso_8859-3' , 'iso_8859-3:1988' , 'l3' , 'latin3' |
'iso-8859-4' | 'csisolatin4' , 'iso-ir-110' , 'iso8859-4' , 'iso88594' , 'iso_8859-4' , 'iso_8859-4:1988' , 'l4' , 'latin4' |
'iso-8859-5' | 'csisolatincyrillic' , 'cyrillic' , 'iso-ir-144' , 'iso8859-5' , 'iso88595' , 'iso_8859-5' , 'iso_8859-5:1988' |
'iso-8859-6' | 'arabic' , 'asmo-708' , 'csiso88596e' , 'csiso88596i' , 'csisolatinarabic' , 'ecma-114' , 'iso-8859-6-e' , 'iso-8859-6-i' , 'iso-ir-127' , 'iso8859-6' , 'iso88596' , 'iso_8859-6' , 'iso_8859-6:1987' |
'iso-8859-7' | 'csisolatingreek' , 'ecma-118' , 'elot_928' , 'greek' , 'greek8' , 'iso-ir-126' , 'iso8859-7' , 'iso88597' , 'iso_8859-7' , 'iso_8859-7:1987' , 'sun_eu_greek' |
'iso-8859-8' | 'csiso88598e' , 'csisolatinhebrew' , 'hebrew' , 'iso-8859-8-e' , 'iso-ir-138' , 'iso8859-8' , 'iso88598' , 'iso_8859-8' , 'iso_8859-8:1988' , 'visual' |
'iso-8859-8-i' | 'csiso88598i' , 'logical' |
'iso-8859-10' | 'csisolatin6' , 'iso-ir-157' , 'iso8859-10' , 'iso885910' , 'l6' , 'latin6' |
'iso-8859-13' | 'iso8859-13' , 'iso885913' |
'iso-8859-14' | 'iso8859-14' , 'iso885914' |
'iso-8859-15' | 'csisolatin9' , 'iso8859-15' , 'iso885915' , 'iso_8859-15' , 'l9' |
'koi8-r' | 'cskoi8r' , 'koi' , 'koi8' , 'koi8_r' |
'koi8-u' | 'koi8-ru' |
'macintosh' | 'csmacintosh' , 'mac' , 'x-mac-roman' |
'windows-874' | 'dos-874' , 'iso-8859-11' , 'iso8859-11' , 'iso885911' , 'tis-620' |
'windows-1250' | 'cp1250' , 'x-cp1250' |
'windows-1251' | 'cp1251' , 'x-cp1251' |
'windows-1252' | 'ansi_x3.4-1968' , 'ascii' , 'cp1252' , 'cp819' , 'csisolatin1' , 'ibm819' , 'iso-8859-1' , 'iso-ir-100' , 'iso8859-1' , 'iso88591' , 'iso_8859-1' , 'iso_8859-1:1987' , 'l1' , 'latin1' , 'us-ascii' , 'x-cp1252' |
'windows-1253' | 'cp1253' , 'x-cp1253' |
'windows-1254' | 'cp1254' , 'csisolatin5' , 'iso-8859-9' , 'iso-ir-148' , 'iso8859-9' , 'iso88599' , 'iso_8859-9' , 'iso_8859-9:1989' , 'l5' , 'latin5' , 'x-cp1254' |
'windows-1255' | 'cp1255' , 'x-cp1255' |
'windows-1256' | 'cp1256' , 'x-cp1256' |
'windows-1257' | 'cp1257' , 'x-cp1257' |
'windows-1258' | 'cp1258' , 'x-cp1258' |
'x-mac-cyrillic' | 'x-mac-ukrainian' |
'gbk' | 'chinese' , 'csgb2312' , 'csiso58gb231280' , 'gb2312' , 'gb_2312' , 'gb_2312-80' , 'iso-ir-58' , 'x-gbk' |
'gb18030' | |
'big5' | 'big5-hkscs' , 'cn-big5' , 'csbig5' , 'x-x-big5' |
'euc-jp' | 'cseucpkdfmtjapanese' , 'x-euc-jp' |
'iso-2022-jp' | 'csiso2022jp' |
'shift_jis' | 'csshiftjis' , 'ms932' , 'ms_kanji' , 'shift-jis' , 'sjis' , 'windows-31j' , 'x-sjis' |
'euc-kr' | 'cseuckr' , 'csksc56011987' , 'iso-ir-149' , 'korean' , 'ks_c_5601-1987' , 'ks_c_5601-1989' , 'ksc5601' , 'ksc_5601' , 'windows-949' |
Node.js가 small-icu
옵션으로 빌드될 때 지원되는 인코딩
인코딩 | 별칭 |
---|---|
'utf-8' | 'unicode-1-1-utf-8' , 'utf8' |
'utf-16le' | 'utf-16' |
'utf-16be' |
ICU가 비활성화되었을 때 지원되는 인코딩
인코딩 | 별칭 |
---|---|
'utf-8' | 'unicode-1-1-utf-8' , 'utf8' |
'utf-16le' | 'utf-16' |
WHATWG 인코딩 표준에 나열된 'iso-8859-16'
인코딩은 지원되지 않습니다.
new TextDecoder([encoding[, options]])
새로운 TextDecoder
인스턴스를 만듭니다. encoding
은 지원되는 인코딩 또는 별칭 중 하나를 지정할 수 있습니다.
TextDecoder
클래스는 전역 객체에서도 사용할 수 있습니다.
textDecoder.decode([input[, options]])
input
<ArrayBuffer> | <DataView> | <TypedArray> 인코딩된 데이터를 포함하는ArrayBuffer
,DataView
또는TypedArray
인스턴스입니다.options
<Object>stream
<boolean> 추가 데이터 청크가 예상되는 경우true
입니다. 기본값:false
.
반환값: <string>
input
을 디코딩하고 문자열을 반환합니다. options.stream
이 true
이면 input
끝에서 발생하는 불완전한 바이트 시퀀스는 내부적으로 버퍼링되고 textDecoder.decode()
를 다음 번 호출한 후에 방출됩니다.
textDecoder.fatal
이 true
이면 발생하는 디코딩 오류로 인해 TypeError
가 발생합니다.
textDecoder.encoding
TextDecoder
인스턴스에서 지원하는 인코딩입니다.
textDecoder.fatal
디코딩 오류로 인해 TypeError
가 발생하면 값은 true
입니다.
textDecoder.ignoreBOM
디코딩 결과에 바이트 순서 표시가 포함되면 값은 true
입니다.
Class: util.TextEncoder
[기록]
버전 | 변경 사항 |
---|---|
v11.0.0 | 클래스가 이제 전역 객체에서 사용 가능합니다. |
v8.3.0 | 추가됨: v8.3.0 |
WHATWG 인코딩 표준 TextEncoder
API의 구현입니다. 모든 TextEncoder
인스턴스는 UTF-8 인코딩만 지원합니다.
const encoder = new TextEncoder()
const uint8array = encoder.encode('this is some data')
TextEncoder
클래스는 전역 객체에서도 사용할 수 있습니다.
textEncoder.encode([input])
input
<string> 인코딩할 텍스트입니다. 기본값: 빈 문자열입니다.- 반환 값: <Uint8Array>
input
문자열을 UTF-8로 인코딩하고 인코딩된 바이트를 포함하는 Uint8Array
를 반환합니다.
textEncoder.encodeInto(src, dest)
추가됨: v12.11.0
src
<string> 인코딩할 텍스트입니다.dest
<Uint8Array> 인코딩 결과를 저장할 배열입니다.- 반환 값: <Object>
src
문자열을 dest
Uint8Array로 UTF-8로 인코딩하고 읽은 유니코드 코드 단위와 기록된 UTF-8 바이트를 포함하는 객체를 반환합니다.
const encoder = new TextEncoder()
const src = 'this is some data'
const dest = new Uint8Array(10)
const { read, written } = encoder.encodeInto(src, dest)
textEncoder.encoding
TextEncoder
인스턴스에서 지원하는 인코딩입니다. 항상 'utf-8'
로 설정됩니다.
util.toUSVString(string)
추가된 버전: v16.8.0, v14.18.0
string
<string>
서로게이트 코드 포인트(또는 동등하게, 쌍을 이루지 않은 서로게이트 코드 유닛)를 유니코드 "교체 문자" U+FFFD로 바꾼 후의 string
을 반환합니다.
util.transferableAbortController()
추가된 버전: v18.11.0
<AbortController> 인스턴스를 생성하고 반환합니다. 해당 인스턴스의 <AbortSignal>은 전송 가능으로 표시되어 structuredClone()
또는 postMessage()
와 함께 사용할 수 있습니다.
util.transferableAbortSignal(signal)
추가된 버전: v18.11.0
signal
<AbortSignal>- 반환: <AbortSignal>
주어진 <AbortSignal>을 전송 가능으로 표시하여 structuredClone()
및 postMessage()
와 함께 사용할 수 있도록 합니다.
const signal = transferableAbortSignal(AbortSignal.timeout(100))
const channel = new MessageChannel()
channel.port2.postMessage(signal, [signal])
util.aborted(signal, resource)
추가된 버전: v19.7.0, v18.16.0
signal
<AbortSignal>resource
<Object> 중단 가능한 작업과 연결되어 있고 약하게 유지되는 null이 아닌 모든 객체입니다.resource
가signal
이 중단되기 전에 가비지 컬렉션되면 프로미스는 보류 중인 상태로 유지되어 Node.js가 해당 프로미스 추적을 중지할 수 있게 합니다. 이는 장기 실행되거나 취소 불가능한 작업에서 메모리 누수를 방지하는 데 도움이 됩니다.- 반환: <Promise>
제공된 signal
에서 abort 이벤트를 수신하고 signal
이 중단될 때 확인되는 프로미스를 반환합니다. resource
가 제공된 경우, 작업과 연결된 객체를 약하게 참조하므로, resource
가 signal
이 중단되기 전에 가비지 컬렉션되면 반환된 프로미스는 보류 중인 상태로 유지됩니다. 이는 장기 실행되거나 취소 불가능한 작업에서 메모리 누수를 방지합니다.
const { aborted } = require('node:util')
// 사용자 정의 리소스 또는 작업과 같은 중단 가능한 신호를 가진 객체를 가져옵니다.
const dependent = obtainSomethingAbortable()
// `dependent`를 리소스로 전달하여, 프로미스가 `dependent`가 신호가 중단될 때 여전히 메모리에 있는 경우에만 확인되어야 함을 나타냅니다.
aborted(dependent.signal, dependent).then(() => {
// 이 코드는 `dependent`가 중단될 때 실행됩니다.
console.log('종속 리소스가 중단되었습니다.')
})
// 중단을 트리거하는 이벤트를 시뮬레이션합니다.
dependent.on('event', () => {
dependent.abort() // 이로 인해 `aborted` 프로미스가 확인됩니다.
})
import { aborted } from 'node:util'
// 사용자 정의 리소스 또는 작업과 같은 중단 가능한 신호를 가진 객체를 가져옵니다.
const dependent = obtainSomethingAbortable()
// `dependent`를 리소스로 전달하여, 프로미스가 `dependent`가 신호가 중단될 때 여전히 메모리에 있는 경우에만 확인되어야 함을 나타냅니다.
aborted(dependent.signal, dependent).then(() => {
// 이 코드는 `dependent`가 중단될 때 실행됩니다.
console.log('종속 리소스가 중단되었습니다.')
})
// 중단을 트리거하는 이벤트를 시뮬레이션합니다.
dependent.on('event', () => {
dependent.abort() // 이로 인해 `aborted` 프로미스가 확인됩니다.
})
util.types
[연혁]
버전 | 변경 사항 |
---|---|
v15.3.0 | require('util/types') 로 노출됨. |
v10.0.0 | v10.0.0에서 추가됨 |
util.types
는 다양한 종류의 내장 객체에 대한 타입 검사를 제공합니다. instanceof
또는 Object.prototype.toString.call(value)
와 달리 이러한 검사는 JavaScript에서 액세스할 수 있는 객체의 속성(예: 프로토타입)을 검사하지 않으며 일반적으로 C++ 호출의 오버헤드를 갖습니다.
결과는 일반적으로 값이 JavaScript에서 어떤 종류의 속성 또는 동작을 노출하는지에 대한 보증을 하지 않습니다. 주로 JavaScript에서 타입 검사를 선호하는 애드온 개발자에게 유용합니다.
API는 require('node:util').types
또는 require('node:util/types')
를 통해 액세스할 수 있습니다.
util.types.isAnyArrayBuffer(value)
추가된 버전: v10.0.0
값이 내장된 ArrayBuffer
또는 SharedArrayBuffer
인스턴스인 경우 true
를 반환합니다.
util.types.isArrayBuffer()
및 util.types.isSharedArrayBuffer()
도 참조하십시오.
util.types.isAnyArrayBuffer(new ArrayBuffer()) // true 반환
util.types.isAnyArrayBuffer(new SharedArrayBuffer()) // true 반환
util.types.isArrayBufferView(value)
추가된 버전: v10.0.0
값이 유형 배열 객체 또는 DataView
와 같은 ArrayBuffer
뷰 중 하나의 인스턴스인 경우 true
를 반환합니다. ArrayBuffer.isView()
와 동일합니다.
util.types.isArrayBufferView(new Int8Array()) // true
util.types.isArrayBufferView(Buffer.from('hello world')) // true
util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))) // true
util.types.isArrayBufferView(new ArrayBuffer()) // false
util.types.isArgumentsObject(value)
추가된 버전: v10.0.0
값이 arguments
객체이면 true
를 반환합니다.
function foo() {
util.types.isArgumentsObject(arguments) // true 반환
}
util.types.isArrayBuffer(value)
추가된 버전: v10.0.0
값이 내장된 ArrayBuffer
인스턴스이면 true
를 반환합니다. 여기에는 SharedArrayBuffer
인스턴스는 포함되지 않습니다. 일반적으로 둘 다 테스트하는 것이 바람직합니다. 이를 위해서는 util.types.isAnyArrayBuffer()
를 참조하십시오.
util.types.isArrayBuffer(new ArrayBuffer()) // true 반환
util.types.isArrayBuffer(new SharedArrayBuffer()) // false 반환
util.types.isAsyncFunction(value)
추가된 버전: v10.0.0
값이 async 함수이면 true
를 반환합니다. 이것은 JavaScript 엔진이 보는 것만 보고합니다. 특히, 트랜스파일 도구가 사용된 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.
util.types.isAsyncFunction(function foo() {}) // false 반환
util.types.isAsyncFunction(async function foo() {}) // true 반환
util.types.isBigInt64Array(value)
추가된 버전: v10.0.0
값이 BigInt64Array
인스턴스이면 true
를 반환합니다.
util.types.isBigInt64Array(new BigInt64Array()) // true 반환
util.types.isBigInt64Array(new BigUint64Array()) // false 반환
util.types.isBigIntObject(value)
추가된 버전: v10.4.0
값이 Object(BigInt(123))
으로 생성된 것과 같은 BigInt 객체이면 true
를 반환합니다.
util.types.isBigIntObject(Object(BigInt(123))) // true 반환
util.types.isBigIntObject(BigInt(123)) // false 반환
util.types.isBigIntObject(123) // false 반환
util.types.isBigUint64Array(value)
추가된 버전: v10.0.0
값이 BigUint64Array
인스턴스이면 true
를 반환합니다.
util.types.isBigUint64Array(new BigInt64Array()) // false 반환
util.types.isBigUint64Array(new BigUint64Array()) // true 반환
util.types.isBooleanObject(value)
추가된 버전: v10.0.0
값이 new Boolean()
으로 생성된 것과 같은 boolean 객체이면 true
를 반환합니다.
util.types.isBooleanObject(false) // false 반환
util.types.isBooleanObject(true) // false 반환
util.types.isBooleanObject(new Boolean(false)) // true 반환
util.types.isBooleanObject(new Boolean(true)) // true 반환
util.types.isBooleanObject(Boolean(false)) // false 반환
util.types.isBooleanObject(Boolean(true)) // false 반환
util.types.isBoxedPrimitive(value)
추가된 버전: v10.11.0
값이 new Boolean()
, new String()
또는 Object(Symbol())
으로 생성된 것과 같은 박싱된 원시 객체이면 true
를 반환합니다.
예시:
util.types.isBoxedPrimitive(false) // false 반환
util.types.isBoxedPrimitive(new Boolean(false)) // true 반환
util.types.isBoxedPrimitive(Symbol('foo')) // false 반환
util.types.isBoxedPrimitive(Object(Symbol('foo'))) // true 반환
util.types.isBoxedPrimitive(Object(BigInt(5))) // true 반환
util.types.isCryptoKey(value)
추가된 버전: v16.2.0
value
가 <CryptoKey>이면 true
를 반환하고, 그렇지 않으면 false
를 반환합니다.
util.types.isDataView(value)
추가된 버전: v10.0.0
값이 내장 DataView
인스턴스이면 true
를 반환합니다.
const ab = new ArrayBuffer(20)
util.types.isDataView(new DataView(ab)) // true 반환
util.types.isDataView(new Float64Array()) // false 반환
ArrayBuffer.isView()
도 참조하세요.
util.types.isDate(value)
추가된 버전: v10.0.0
값이 내장 Date
인스턴스이면 true
를 반환합니다.
util.types.isDate(new Date()) // true 반환
util.types.isExternal(value)
추가된 버전: v10.0.0
값이 네이티브 External
값일 경우 true
를 반환합니다.
네이티브 External
값은 네이티브 코드에서 액세스하기 위한 원시 C++ 포인터(void*
)를 포함하며 다른 속성이 없는 특별한 유형의 객체입니다. 이러한 객체는 Node.js 내부 또는 네이티브 애드온에 의해 생성됩니다. JavaScript에서 이들은 null
프로토타입을 가진 동결된 객체입니다.
#include <js_native_api.h>
#include <stdlib.h>
napi_value result;
static napi_value MyNapi(napi_env env, napi_callback_info info) {
int* raw = (int*) malloc(1024);
napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result);
if (status != napi_ok) {
napi_throw_error(env, NULL, "napi_create_external failed");
return NULL;
}
return result;
}
...
DECLARE_NAPI_PROPERTY("myNapi", MyNapi)
...
const native = require('napi_addon.node')
const data = native.myNapi()
util.types.isExternal(data) // true 반환
util.types.isExternal(0) // false 반환
util.types.isExternal(new String('foo')) // false 반환
napi_create_external
에 대한 자세한 내용은 napi_create_external()
을 참조하십시오.
util.types.isFloat32Array(value)
추가된 버전: v10.0.0
값이 내장 Float32Array
인스턴스일 경우 true
를 반환합니다.
util.types.isFloat32Array(new ArrayBuffer()) // false 반환
util.types.isFloat32Array(new Float32Array()) // true 반환
util.types.isFloat32Array(new Float64Array()) // false 반환
util.types.isFloat64Array(value)
Added in: v10.0.0
값이 내장 Float64Array
인스턴스이면 true
를 반환합니다.
util.types.isFloat64Array(new ArrayBuffer()) // Returns false
util.types.isFloat64Array(new Uint8Array()) // Returns false
util.types.isFloat64Array(new Float64Array()) // Returns true
util.types.isGeneratorFunction(value)
Added in: v10.0.0
값이 제너레이터 함수이면 true
를 반환합니다. 이것은 JavaScript 엔진이 보는 것만을 보고합니다. 특히 변환 도구를 사용한 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.
util.types.isGeneratorFunction(function foo() {}) // Returns false
util.types.isGeneratorFunction(function* foo() {}) // Returns true
util.types.isGeneratorObject(value)
Added in: v10.0.0
값이 내장 제너레이터 함수에서 반환된 제너레이터 객체이면 true
를 반환합니다. 이것은 JavaScript 엔진이 보는 것만을 보고합니다. 특히 변환 도구를 사용한 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.
function* foo() {}
const generator = foo()
util.types.isGeneratorObject(generator) // Returns true
util.types.isInt8Array(value)
Added in: v10.0.0
값이 내장 Int8Array
인스턴스이면 true
를 반환합니다.
util.types.isInt8Array(new ArrayBuffer()) // Returns false
util.types.isInt8Array(new Int8Array()) // Returns true
util.types.isInt8Array(new Float64Array()) // Returns false
util.types.isInt16Array(value)
추가된 버전: v10.0.0
값이 내장된 Int16Array
인스턴스이면 true
를 반환합니다.
util.types.isInt16Array(new ArrayBuffer()) // false 반환
util.types.isInt16Array(new Int16Array()) // true 반환
util.types.isInt16Array(new Float64Array()) // false 반환
util.types.isInt32Array(value)
추가된 버전: v10.0.0
값이 내장된 Int32Array
인스턴스이면 true
를 반환합니다.
util.types.isInt32Array(new ArrayBuffer()) // false 반환
util.types.isInt32Array(new Int32Array()) // true 반환
util.types.isInt32Array(new Float64Array()) // false 반환
util.types.isKeyObject(value)
추가된 버전: v16.2.0
value
가 <KeyObject>이면 true
를 반환하고, 그렇지 않으면 false
를 반환합니다.
util.types.isMap(value)
추가된 버전: v10.0.0
값이 내장된 Map
인스턴스이면 true
를 반환합니다.
util.types.isMap(new Map()) // true 반환
util.types.isMapIterator(value)
추가된 버전: v10.0.0
값이 내장된 Map
인스턴스에 대해 반환된 이터레이터이면 true
를 반환합니다.
const map = new Map()
util.types.isMapIterator(map.keys()) // true 반환
util.types.isMapIterator(map.values()) // true 반환
util.types.isMapIterator(map.entries()) // true 반환
util.types.isMapIterator(map[Symbol.iterator]()) // true 반환
util.types.isModuleNamespaceObject(value)
추가된 버전: v10.0.0
값이 모듈 네임스페이스 객체의 인스턴스이면 true
를 반환합니다.
import * as ns from './a.js'
util.types.isModuleNamespaceObject(ns) // true 반환
util.types.isNativeError(value)
추가된 버전: v10.0.0
값이 내장된 Error
타입의 생성자에 의해 반환되었으면 true
를 반환합니다.
console.log(util.types.isNativeError(new Error())) // true
console.log(util.types.isNativeError(new TypeError())) // true
console.log(util.types.isNativeError(new RangeError())) // true
네이티브 에러 타입의 서브클래스 또한 네이티브 에러입니다.
class MyError extends Error {}
console.log(util.types.isNativeError(new MyError())) // true
값이 네이티브 에러 클래스의 instanceof
인 것은 해당 값에 대해 isNativeError()
가 true
를 반환하는 것과 동일하지 않습니다. isNativeError()
는 다른 영역에서 온 에러에 대해 true
를 반환하는 반면, instanceof Error
는 이러한 에러에 대해 false
를 반환합니다.
const vm = require('node:vm')
const context = vm.createContext({})
const myError = vm.runInContext('new Error()', context)
console.log(util.types.isNativeError(myError)) // true
console.log(myError instanceof Error) // false
반대로, isNativeError()
는 네이티브 에러의 생성자에 의해 반환되지 않은 모든 객체에 대해 false
를 반환합니다. 여기에는 네이티브 에러의 instanceof
인 값이 포함됩니다.
const myError = { __proto__: Error.prototype }
console.log(util.types.isNativeError(myError)) // false
console.log(myError instanceof Error) // true
util.types.isNumberObject(value)
추가된 버전: v10.0.0
값이 new Number()
로 생성된 숫자 객체인 경우 true
를 반환합니다.
util.types.isNumberObject(0) // false 반환
util.types.isNumberObject(new Number(0)) // true 반환
util.types.isPromise(value)
추가된 버전: v10.0.0
값이 내장된 Promise
인 경우 true
를 반환합니다.
util.types.isPromise(Promise.resolve(42)) // true 반환
util.types.isProxy(value)
추가된 버전: v10.0.0
값이 Proxy
인스턴스인 경우 true
를 반환합니다.
const target = {}
const proxy = new Proxy(target, {})
util.types.isProxy(target) // false 반환
util.types.isProxy(proxy) // true 반환
util.types.isRegExp(value)
추가된 버전: v10.0.0
값이 정규 표현식 객체인 경우 true
를 반환합니다.
util.types.isRegExp(/abc/) // true 반환
util.types.isRegExp(new RegExp('abc')) // true 반환
util.types.isSet(value)
Added in: v10.0.0
값이 내장 Set
인스턴스이면 true
를 반환합니다.
util.types.isSet(new Set()) // Returns true
util.types.isSetIterator(value)
Added in: v10.0.0
값이 내장 Set
인스턴스에 대해 반환된 이터레이터이면 true
를 반환합니다.
const set = new Set()
util.types.isSetIterator(set.keys()) // Returns true
util.types.isSetIterator(set.values()) // Returns true
util.types.isSetIterator(set.entries()) // Returns true
util.types.isSetIterator(set[Symbol.iterator]()) // Returns true
util.types.isSharedArrayBuffer(value)
Added in: v10.0.0
값이 내장 SharedArrayBuffer
인스턴스이면 true
를 반환합니다. 여기에는 ArrayBuffer
인스턴스는 포함되지 않습니다. 일반적으로 둘 다 테스트하는 것이 바람직합니다. 이를 위해서는 util.types.isAnyArrayBuffer()
를 참조하십시오.
util.types.isSharedArrayBuffer(new ArrayBuffer()) // Returns false
util.types.isSharedArrayBuffer(new SharedArrayBuffer()) // Returns true
util.types.isStringObject(value)
Added in: v10.0.0
값이 new String()
으로 생성된 문자열 객체이면 true
를 반환합니다.
util.types.isStringObject('foo') // Returns false
util.types.isStringObject(new String('foo')) // Returns true
util.types.isSymbolObject(value)
Added in: v10.0.0
값이 Symbol
기본형에 Object()
를 호출하여 생성된 심볼 객체이면 true
를 반환합니다.
const symbol = Symbol('foo')
util.types.isSymbolObject(symbol) // Returns false
util.types.isSymbolObject(Object(symbol)) // Returns true
util.types.isTypedArray(value)
Added in: v10.0.0
값이 내장 TypedArray
인스턴스이면 true
를 반환합니다.
util.types.isTypedArray(new ArrayBuffer()) // Returns false
util.types.isTypedArray(new Uint8Array()) // Returns true
util.types.isTypedArray(new Float64Array()) // Returns true
ArrayBuffer.isView()
도 참조하십시오.
util.types.isUint8Array(value)
Added in: v10.0.0
값이 내장 Uint8Array
인스턴스이면 true
를 반환합니다.
util.types.isUint8Array(new ArrayBuffer()) // Returns false
util.types.isUint8Array(new Uint8Array()) // Returns true
util.types.isUint8Array(new Float64Array()) // Returns false
util.types.isUint8ClampedArray(value)
추가된 버전: v10.0.0
값이 내장된 Uint8ClampedArray
인스턴스이면 true
를 반환합니다.
util.types.isUint8ClampedArray(new ArrayBuffer()) // false 반환
util.types.isUint8ClampedArray(new Uint8ClampedArray()) // true 반환
util.types.isUint8ClampedArray(new Float64Array()) // false 반환
util.types.isUint16Array(value)
추가된 버전: v10.0.0
값이 내장된 Uint16Array
인스턴스이면 true
를 반환합니다.
util.types.isUint16Array(new ArrayBuffer()) // false 반환
util.types.isUint16Array(new Uint16Array()) // true 반환
util.types.isUint16Array(new Float64Array()) // false 반환
util.types.isUint32Array(value)
추가된 버전: v10.0.0
값이 내장된 Uint32Array
인스턴스이면 true
를 반환합니다.
util.types.isUint32Array(new ArrayBuffer()) // false 반환
util.types.isUint32Array(new Uint32Array()) // true 반환
util.types.isUint32Array(new Float64Array()) // false 반환
util.types.isWeakMap(value)
추가된 버전: v10.0.0
값이 내장된 WeakMap
인스턴스이면 true
를 반환합니다.
util.types.isWeakMap(new WeakMap()) // true 반환
util.types.isWeakSet(value)
Added in: v10.0.0
주어진 값이 내장된 WeakSet
인스턴스인 경우 true
를 반환합니다.
util.types.isWeakSet(new WeakSet()) // true를 반환합니다.
사용 중단된 API
다음 API는 사용이 중단되었으며 더 이상 사용해서는 안 됩니다. 기존 응용 프로그램 및 모듈은 대체 방법을 찾도록 업데이트해야 합니다.
util._extend(target, source)
Added in: v0.7.5
Deprecated since: v6.0.0
[Stable: 0 - Deprecated]
Stable: 0 Stability: 0 - 사용 중단됨: 대신 Object.assign()
을 사용하세요.
util._extend()
메서드는 내부 Node.js 모듈 외부에서 사용하기 위한 것이 아니었습니다. 커뮤니티에서 이를 발견하여 사용했습니다.
사용이 중단되었으며 새 코드에서 사용해서는 안 됩니다. JavaScript는 Object.assign()
를 통해 매우 유사한 내장 기능을 제공합니다.
util.isArray(object)
Added in: v0.6.0
Deprecated since: v4.0.0
[Stable: 0 - Deprecated]
Stable: 0 Stability: 0 - 사용 중단됨: 대신 Array.isArray()
을 사용하세요.
Array.isArray()
의 별칭입니다.
주어진 object
가 Array
이면 true
를 반환합니다. 그렇지 않으면 false
를 반환합니다.
const util = require('node:util')
util.isArray([])
// 반환 값: true
util.isArray(new Array())
// 반환 값: true
util.isArray({})
// 반환 값: false