Spec-Zone.ru › Node.js 22 LTS

Утилиты

Стабильность: 2 — Стабильный

Исходный код: lib/util.js

Модуль node:util поддерживает потребности внутренних API Node.js. Многие из этих утилит также полезны разработчикам приложений и модулей. Чтобы получить к нему доступ:

Модули JavaScript
import util from 'node:util';
CommonJS
const util = require('node:util');

util.callbackify(original)

Добавлено в: v8.2.0
  • original <Function> Функция async
  • Возвращает: <Function> функция в стиле обратного вызова

Принимает функцию async (или функцию, возвращающую Promise) и возвращает функцию, следующую стилю обратного вызова с обработкой ошибки первым аргументом, то есть принимающую обратный вызов (err, value) => ... в качестве последнего аргумента. В обратном вызове первый аргумент будет содержать причину отклонения (или null, если Promise был успешно выполнен), а второй аргумент — полученное значение.

Модули JavaScript
import { callbackify } from 'node:util';

async function fn() {
  return 'hello world';
}
const callbackFunction = callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});
CommonJS
const { callbackify } = require('node:util');

async function fn() {
  return 'hello world';
}
const callbackFunction = callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});

Выведет:

hello world copy

Обратный вызов выполняется асинхронно, и его трассировка стека будет ограниченной. Если обратный вызов выбрасывает исключение, процесс генерирует событие 'uncaughtException' и завершится, если это событие не обработано.

Поскольку null имеет особое значение в качестве первого аргумента обратного вызова, если обёрнутая функция отклоняет Promise с ложным значением в качестве причины, это значение оборачивается в Error, а исходное значение сохраняется в поле с именем reason.

function fn() {
  return Promise.reject(null);
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  // When the Promise was rejected with `null` it is wrapped with an Error and
  // the original value is stored in `reason`.
  err && Object.hasOwn(err, 'reason') && err.reason === null;  // true
}); copy

util.debuglog(section[, callback])

Добавлено в: v0.11.3
  • section <string> Строка, определяющая часть приложения, для которой создаётся функция debuglog.
  • callback <Function> Функция обратного вызова, вызываемая при первом вызове функции журналирования с аргументом-функцией, представляющей собой более оптимизированную функцию журналирования.
  • Возвращает: <Function> Функция журналирования

Метод util.debuglog() используется для создания функции, которая условно записывает отладочные сообщения в stderr в зависимости от наличия переменной среды NODE_DEBUG. Если имя section содержится в значении этой переменной среды, возвращённая функция работает аналогично console.error(). В противном случае возвращённая функция ничего не делает.

Модули JavaScript
import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hello from foo [%d]', 123);
CommonJS
const { debuglog } = require('node:util');
const log = debuglog('foo');

log('hello from foo [%d]', 123);

Если запустить эту программу с NODE_DEBUG=foo в среде, она выведет что-то вроде:

FOO 3245: hello from foo [123] copy

где 3245 — идентификатор процесса. Если запустить программу без этой переменной среды, она ничего не выведет.

В section также поддерживаются подстановочные знаки:

Модули JavaScript
import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hi there, it\'s foo-bar [%d]', 2333);
CommonJS
const { debuglog } = require('node:util');
const log = debuglog('foo');

log('hi there, it\'s foo-bar [%d]', 2333);

если запустить программу с NODE_DEBUG=foo* в среде, она выведет что-то вроде:

FOO-BAR 3257: hi there, it's foo-bar [2333] copy

В переменной среды NODE_DEBUG можно указать несколько разделённых запятыми имён section: NODE_DEBUG=fs,net,tls.

Необязательный аргумент callback можно использовать, чтобы заменить функцию журналирования другой функцией, не требующей инициализации или ненужной обёртки.

Модули JavaScript
import { debuglog } from 'node:util';
let log = debuglog('internals', (debug) => {
  // Replace with a logging function that optimizes out
  // testing if the section is enabled
  log = debug;
});
CommonJS
const { debuglog } = require('node:util');
let log = debuglog('internals', (debug) => {
  // Replace with a logging function that optimizes out
  // testing if the section is enabled
  log = debug;
});

debuglog().enabled

Добавлено в: v14.9.0
  • Тип: <boolean>

Геттер util.debuglog().enabled используется для создания проверки, которую можно использовать в условных выражениях в зависимости от наличия переменной среды NODE_DEBUG. Если имя section содержится в значении этой переменной среды, возвращаемое значение будет true. В противном случае возвращаемое значение будет false.

Модули JavaScript
import { debuglog } from 'node:util';
const enabled = debuglog('foo').enabled;
if (enabled) {
  console.log('hello from foo [%d]', 123);
}
CommonJS
const { debuglog } = require('node:util');
const enabled = debuglog('foo').enabled;
if (enabled) {
  console.log('hello from foo [%d]', 123);
}

Если запустить эту программу с NODE_DEBUG=foo в среде, она выведет что-то вроде:

hello from foo [123] copy

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 (которым может быть функция или класс) таким образом, что он помечается как устаревший.

Модули JavaScript
import { deprecate } from 'node:util';

export const obsoleteFunction = deprecate(() => {
  // Do something here.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');
CommonJS
const { deprecate } = require('node:util');

exports.obsoleteFunction = deprecate(() => {
  // Do something here.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');

При вызове util.deprecate() возвращает функцию, которая генерирует DeprecationWarning с помощью события 'warning'. Предупреждение будет сгенерировано и выведено в stderr при первом вызове возвращённой функции. После вывода предупреждения обёрнутая функция вызывается без генерации предупреждения.

Если при нескольких вызовах util.deprecate() передан один и тот же необязательный аргумент code, предупреждение будет выведено только один раз для этого code.

Модули JavaScript
import { deprecate } from 'node:util';

const fn1 = deprecate(
  () => 'a value',
  'deprecation message',
  'DEP0001',
);
const fn2 = deprecate(
  () => 'a  different value',
  'other dep message',
  'DEP0001',
);
fn1(); // Emits a deprecation warning with code DEP0001
fn2(); // Does not emit a deprecation warning because it has the same code
CommonJS
const { deprecate } = require('node:util');

const fn1 = deprecate(
  function() {
    return 'a value';
  },
  'deprecation message',
  'DEP0001',
);
const fn2 = deprecate(
  function() {
    return 'a  different value';
  },
  'other dep message',
  'DEP0001',
);
fn1(); // Emits a deprecation warning with code DEP0001
fn2(); // Does not emit a deprecation warning because it has the same code

Если используются флаги командной строки --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.diff(actual, expected)

Добавлено в: v22.15.0
Стабильность: 1 — Экспериментальный
  • actual <Array> | <string> Первое сравниваемое значение

  • expected <Array> | <string> Второе сравниваемое значение

  • Возвращает: <Array> Массив записей о различиях. Каждая запись — это массив из двух элементов:

    • 0 <number> Код операции: -1 для удаления, 0 для отсутствия изменений, 1 для вставки
    • 1 <string> Значение, связанное с операцией
  • Сложность алгоритма: O(N*D), где:

  • N — общая длина двух последовательностей (N = actual.length + expected.length)

  • D — расстояние редактирования (минимальное число операций, необходимых для преобразования одной последовательности в другую).

util.diff() сравнивает две строки или массива и возвращает массив записей о различиях. Для вычисления минимальных различий используется алгоритм diff Майерса — тот же алгоритм, который применяется внутри сообщений об ошибках утверждений.

Если значения равны, возвращается пустой массив.

const { diff } = require('node:util');

// Comparing strings
const actualString = '12345678';
const expectedString = '12!!5!7!';
console.log(diff(actualString, expectedString));
// [
//   [0, '1'],
//   [0, '2'],
//   [1, '3'],
//   [1, '4'],
//   [-1, '!'],
//   [-1, '!'],
//   [0, '5'],
//   [1, '6'],
//   [-1, '!'],
//   [0, '7'],
//   [1, '8'],
//   [-1, '!'],
// ]
// Comparing arrays
const actualArray = ['1', '2', '3'];
const expectedArray = ['1', '3', '4'];
console.log(diff(actualArray, expectedArray));
// [
//   [0, '1'],
//   [1, '2'],
//   [0, '3'],
//   [-1, '4'],
// ]
// Equal values return empty array
console.log(diff('same', 'same'));
// [] copy

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

Опция depth спецификатора %o теперь будет использовать глубину по умолчанию, если заданное значение недопустимо.

v10.12.0

Спецификаторы %d и %i теперь поддерживают BigInt.

v8.4.0

Теперь поддерживаются спецификаторы %o и %O.

v0.5.3

Добавлено в: v0.5.3

  • format <string> Строка формата, подобная printf.

Метод util.format() возвращает отформатированную строку, используя первый аргумент в качестве строки формата, подобной printf, которая может содержать ноль или более спецификаторов формата. Каждый спецификатор заменяется преобразованным значением соответствующего аргумента. Поддерживаются следующие спецификаторы:

  • %s: для преобразования всех значений, кроме BigInt, Object и -0, будет использоваться String. Значения BigInt будут представлены с помощью n, а объекты, у которых нет ни пользовательской функции toString, ни функции Symbol.toPrimitive, проверяются с помощью util.inspect() с параметрами { depth: 0, colors: false, compact: 3 }.
  • %d: для преобразования всех значений, кроме BigInt и Symbol, будет использоваться Number.
  • %i: для всех значений, кроме BigInt и Symbol, используется parseInt(value, 10).
  • %f: для всех значений, кроме Symbol, используется parseFloat(value).
  • %j: JSON. Заменяется строкой '[Circular]', если аргумент содержит циклические ссылки.
  • %o: Object. Строковое представление объекта с общим форматированием объектов JavaScript. Аналогично util.inspect() с параметрами { showHidden: true, showProxy: true }. Отображает весь объект, включая неперечисляемые свойства и прокси.
  • %O: Object. Строковое представление объекта с общим форматированием объектов JavaScript. Аналогично util.inspect() без параметров. Отображает весь объект, но не включает неперечисляемые свойства и прокси.
  • %c: CSS. Этот спецификатор игнорируется; переданный CSS пропускается.
  • %%: знак процента ('%'). Не использует аргумент.
  • Возвращает: <string> Отформатированная строка

Если для спецификатора нет соответствующего аргумента, он не заменяется:

util.format('%s:%s', 'foo');
// Returns: 'foo:%s' copy

Значения, не входящие в строку формата, форматируются с помощью util.inspect(), если их тип не является string.

Если методу util.format() передано больше аргументов, чем имеется спецификаторов, лишние аргументы добавляются к возвращаемой строке через пробел:

util.format('%s:%s', 'foo', 'bar', 'baz');
// Returns: 'foo:bar baz' copy

Если первый аргумент не содержит допустимого спецификатора формата, util.format() возвращает строку, составленную из всех аргументов, разделённых пробелами:

util.format(1, 2, 3);
// Returns: '1 2 3' copy

Если в util.format() передан только один аргумент, он возвращается как есть, без форматирования:

util.format('%% %s');
// Returns: '%% %s' copy

util.format() — синхронный метод, предназначенный для отладки. Обработка некоторых входных значений может требовать значительных ресурсов и блокировать цикл событий. Используйте эту функцию с осторожностью и никогда не вызывайте её на критически важном для производительности участке кода.

util.formatWithOptions(inspectOptions, format[, ...args])

Добавлено в: v10.0.0
  • inspectOptions <Object>
  • format <string>

Эта функция идентична util.format(), за исключением того, что принимает аргумент inspectOptions, задающий параметры, которые передаются в util.inspect().

util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 });
// Returns 'See object { foo: 42 }', where `42` is colored as a number
// when printed to a terminal. copy

util.getCallSites([frameCount][, options])

История
Версия Изменения
v22.14.0

Свойство column устарело; вместо него следует использовать columnNumber.

v22.14.0

Свойство CallSite.scriptId стало доступно.

v22.12.0

API переименован: util.getCallSite теперь называется util.getCallSites().

v22.9.0

Добавлено в: v22.9.0

Стабильность: 1.1 — Активная разработка
  • frameCount <number> Необязательное количество кадров для захвата в виде объектов call site. По умолчанию: 10. Допустимый диапазон — от 1 до 200.
  • options <Object> Необязательный параметр
    • sourceMap <boolean> Восстанавливает исходное расположение в трассировке стека по source map. Включено по умолчанию при использовании флага --enable-source-maps.
  • Возвращает: <Object[]> Массив объектов call site
    • functionName <string> Возвращает имя функции, связанной с этим call site.
    • scriptName <string> Возвращает имя ресурса, содержащего скрипт функции для этого call site.
    • scriptId <string> Возвращает уникальный идентификатор скрипта, как в протоколе Chrome DevTools Runtime.ScriptId.
    • lineNumber <number> Возвращает номер строки скрипта JavaScript (начиная с 1).
    • columnNumber <number> Возвращает номер столбца скрипта JavaScript (начиная с 1).

Возвращает массив объектов call site, содержащих стек вызывающей функции.

Модули JavaScript
import { getCallSites } from 'node:util';

function exampleFunction() {
  const callSites = getCallSites();

  console.log('Call Sites:');
  callSites.forEach((callSite, index) => {
    console.log(`CallSite ${index + 1}:`);
    console.log(`Function Name: ${callSite.functionName}`);
    console.log(`Script Name: ${callSite.scriptName}`);
    console.log(`Line Number: ${callSite.lineNumber}`);
    console.log(`Column Number: ${callSite.column}`);
  });
  // CallSite 1:
  // Function Name: exampleFunction
  // Script Name: /home/example.js
  // Line Number: 5
  // Column Number: 26

  // CallSite 2:
  // Function Name: anotherFunction
  // Script Name: /home/example.js
  // Line Number: 22
  // Column Number: 3

  // ...
}

// A function to simulate another stack layer
function anotherFunction() {
  exampleFunction();
}

anotherFunction();
CommonJS
const { getCallSites } = require('node:util');

function exampleFunction() {
  const callSites = getCallSites();

  console.log('Call Sites:');
  callSites.forEach((callSite, index) => {
    console.log(`CallSite ${index + 1}:`);
    console.log(`Function Name: ${callSite.functionName}`);
    console.log(`Script Name: ${callSite.scriptName}`);
    console.log(`Line Number: ${callSite.lineNumber}`);
    console.log(`Column Number: ${callSite.column}`);
  });
  // CallSite 1:
  // Function Name: exampleFunction
  // Script Name: /home/example.js
  // Line Number: 5
  // Column Number: 26

  // CallSite 2:
  // Function Name: anotherFunction
  // Script Name: /home/example.js
  // Line Number: 22
  // Column Number: 3

  // ...
}

// A function to simulate another stack layer
function anotherFunction() {
  exampleFunction();
}

anotherFunction();

Исходные расположения можно восстановить, установив параметр sourceMap в значение true. Если source map недоступна, исходное расположение будет совпадать с текущим. Когда включён флаг --enable-source-maps, например при использовании --experimental-transform-types, значение sourceMap по умолчанию будет равно true.

import { getCallSites } from 'node:util';

interface Foo {
  foo: string;
}

const callSites = getCallSites({ sourceMap: true });

// With sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 7
// Column Number: 26

// Without sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 2
// Column Number: 26 copy
const { getCallSites } = require('node:util');

const callSites = getCallSites({ sourceMap: true });

// With sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 7
// Column Number: 26

// Without sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 2
// Column Number: 26 copy

util.getSystemErrorName(err)

Добавлено в: v9.7.0
  • err <number>
  • Возвращает: <string>

Возвращает строковое имя числового кода ошибки, полученного из API Node.js. Соответствие кодов ошибок и их имён зависит от платформы. Список имён распространённых ошибок см. в разделе Распространённые системные ошибки.

fs.access('file/that/does/not/exist', (err) => {
  const name = util.getSystemErrorName(err.errno);
  console.error(name);  // ENOENT
}); copy

util.getSystemErrorMap()

Добавлено в: v16.0.0, v14.17.0
  • Возвращает: <Map>

Возвращает Map со всеми кодами системных ошибок, доступными через API Node.js. Соответствие кодов ошибок и их имён зависит от платформы. Список имён распространённых ошибок см. в разделе Распространённые системные ошибки.

fs.access('file/that/does/not/exist', (err) => {
  const errorMap = util.getSystemErrorMap();
  const name = errorMap.get(err.errno);
  console.error(name);  // ENOENT
}); copy

util.getSystemErrorMessage(err)

Добавлено в: v22.12.0
  • err <number>
  • Возвращает: <string>

Возвращает текстовое сообщение для числового кода ошибки, полученного из API Node.js. Соответствие кодов ошибок и текстовых сообщений зависит от платформы.

fs.access('file/that/does/not/exist', (err) => {
  const message = util.getSystemErrorMessage(err.errno);
  console.error(message);  // No such file or directory
}); copy

util.setTraceSigInt(enable)

Добавлено в: v22.19.0
  • enable <boolean>

Включает или отключает вывод трассировки стека при возникновении SIGINT. API доступен только в главном потоке.

util.inherits(constructor, superConstructor)

История
Версия Изменения
v5.0.0

Параметр constructor теперь может ссылаться на класс ES6.

v0.3.0

Добавлено в: v0.3.0

Стабильность: 3 — Устаревшее: используйте синтаксис классов ES2015 и ключевое слово extends.
  • 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!" copy

Пример ES6 с использованием class и extends:

Модули JavaScript
import EventEmitter from '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');
CommonJS
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]]])

История
Версия Изменения
v16.18.0

Добавлена поддержка maxArrayLength при проверке Set и Map.

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

Теперь объём вывода проверки ограничен примерно 128 МиБ. Данные, превышающие этот размер, не будут проверены полностью.

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. Цвета можно настроить. См. раздел Настройка цветов util.inspect. По умолчанию: false.
    • customInspect <boolean> Если false, функции [util.inspect.custom](depth, opts, inspect) не вызываются. По умолчанию: true.
    • showProxy <boolean> Если true, проверка Proxy включает объекты target и handler. По умолчанию: false.
    • maxArrayLength <integer> Задаёт максимальное количество элементов Array, <TypedArray>, <Map>, <WeakMap> и <WeakSet>, включаемых при форматировании. Укажите null или Infinity, чтобы отобразить все элементы. Укажите 0 или отрицательное значение, чтобы не отображать элементы. По умолчанию: 100.
    • maxStringLength <integer> Задаёт максимальное количество символов, включаемых при форматировании. Укажите null или Infinity, чтобы отобразить все элементы. Укажите 0 или отрицательное значение, чтобы не отображать символы. По умолчанию: 10000.
    • breakLength <integer> Длина, при превышении которой входные значения разбиваются на несколько строк. Укажите Infinity, чтобы форматировать входные данные в одну строку (в сочетании с параметром compact, равным true или любому числу >= 1). По умолчанию: 80.
    • compact <boolean> | <integer> Если задать значение false, каждый ключ объекта будет отображаться с новой строки. Текст, длина которого превышает breakLength, будет разбиваться на новые строки. Если задано число, наиболее n внутренних элементов объединяются в одной строке, если все свойства помещаются в breakLength. Короткие элементы массива также группируются. Дополнительные сведения см. в примере ниже. По умолчанию: 3.
    • sorted <boolean> | <Function> Если задано значение true или функция, все свойства объекта, а также элементы Set и Map сортируются в результирующей строке. Если задано значение true, используется сортировка по умолчанию. Если задана функция, она используется в качестве функции сравнения.
    • getters <boolean> | <string> Если задано значение true, проверяются геттеры. Если задано значение 'get', проверяются только геттеры без соответствующего сеттера. Если задано значение 'set', проверяются только геттеры с соответствующим сеттером. В зависимости от функции геттера это может привести к побочным эффектам. По умолчанию: false.
    • numericSeparator <boolean> Если задано значение true, в качестве разделителя между каждыми тремя цифрами во всех значениях BigInt и числах используется подчёркивание. По умолчанию: false.
  • Возвращает: <string> Представление object.

Метод util.inspect() возвращает строковое представление object, предназначенное для отладки. Вывод util.inspect может измениться в любой момент, поэтому не следует программно полагаться на него. Можно передать дополнительные options, изменяющие результат. util.inspect() использует имя конструктора и/или свойство Symbol.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] {}' copy

Циклические ссылки указывают на свой якорь с помощью индекса ссылки:

Модули JavaScript
import { inspect } from '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] }
// }
CommonJS
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:

Модули JavaScript
import util from 'node:util';

console.log(util.inspect(util, { showHidden: true, depth: null }));
CommonJS
const util = require('node:util');

console.log(util.inspect(util, { showHidden: true, depth: null }));

Следующий пример демонстрирует эффект параметра compact:

Модули JavaScript
import { inspect } from '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(inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// Setting `compact` to false or an integer creates more reader friendly output.
console.log(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'
//   }
// }

// Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a
// single line.
CommonJS
const { inspect } = 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(inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// Setting `compact` to false or an integer creates more reader friendly output.
console.log(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'
//   }
// }

// Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a
// single line.

Параметр showHidden позволяет проверять элементы <WeakMap> и <WeakSet>. Если элементов больше, чем maxArrayLength, не гарантируется, какие именно элементы будут отображены. Это означает, что повторное получение тех же элементов <WeakSet> может привести к разным результатам. Кроме того, элементы, на которые больше не осталось сильных ссылок, могут быть удалены сборщиком мусора в любой момент.

Модули JavaScript
import { inspect } from '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 } }
CommonJS
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().

Модули JavaScript
import { inspect } from 'node:util';
import assert from '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 }),
);
CommonJS
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 добавляет подчёркивание после каждых трёх цифр во всех числах.

Модули JavaScript
import { inspect } from 'node:util';

const thousand = 1000;
const million = 1000000;
const bigNumber = 123456789n;
const bigDecimal = 1234.12345;

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
CommonJS
const { inspect } = require('node:util');

const thousand = 1000;
const million = 1000000;
const bigNumber = 123456789n;
const bigDecimal = 1234.12345;

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() — синхронный метод, предназначенный для отладки. Максимальная длина вывода составляет примерно 128 МиБ. Входные данные, результатом обработки которых будет более длинный вывод, усекаются.

Настройка цветов 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 — выводит текст, но делает его невидимым (псевдоним: conceal)
  • 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() вызовет и использует ее результат при инспектировании объекта.

Модули JavaScript
import { inspect } from 'node:util';

class Box {
  constructor(value) {
    this.value = value;
  }

  [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,
    });

    // Five space padding because that's the size of "Box< ".
    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);

console.log(inspect(box));
// "Box< true >"
CommonJS
const { inspect } = require('node:util');

class Box {
  constructor(value) {
    this.value = value;
  }

  [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,
    });

    // Five space padding because that's the size of "Box< ".
    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);

console.log(inspect(box));
// "Box< true >"

Пользовательские функции [util.inspect.custom](depth, opts, inspect) обычно возвращают строку, но могут возвращать значение любого типа, которое util.inspect() отформатирует соответствующим образом.

Модули JavaScript
import { inspect } from 'node:util';

const obj = { foo: 'this will not show up in the inspect() output' };
obj[inspect.custom] = (depth) => {
  return { bar: 'baz' };
};

console.log(inspect(obj));
// "{ bar: 'baz' }"
CommonJS
const { inspect } = require('node:util');

const obj = { foo: 'this will not show up in the inspect() output' };
obj[inspect.custom] = (depth) => {
  return { bar: 'baz' };
};

console.log(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);
// Prints Password <xxxxxxxx> copy

Дополнительные сведения см. в разделе Пользовательские функции инспектирования объектов.

util.inspect.defaultOptions

Добавлено в версии: v6.4.0

Значение defaultOptions позволяет настроить параметры по умолчанию, используемые util.inspect. Это полезно для таких функций, как console.log или util.format, которые неявно вызывают util.inspect. Ему следует присвоить объект, содержащий один или несколько допустимых параметров util.inspect(). Также поддерживается непосредственное задание свойств параметров.

Модули JavaScript
import { inspect } from 'node:util';
const arr = Array(156).fill(0);

console.log(arr); // Logs the truncated array
inspect.defaultOptions.maxArrayLength = null;
console.log(arr); // logs the full array
CommonJS
const { inspect } = require('node:util');
const arr = Array(156).fill(0);

console.log(arr); // Logs the truncated array
inspect.defaultOptions.maxArrayLength = null;
console.log(arr); // logs the full array

util.isDeepStrictEqual(val1, val2)

Добавлено в версии: v9.0.0
  • val1 <any>
  • val2 <any>
  • Возвращает: <boolean>

Возвращает true, если между val1 и val2 существует глубокое строгое равенство. В противном случае возвращает false.

Дополнительные сведения о глубоком строгом равенстве см. в разделе assert.deepStrictEqual().

Класс: util.MIMEType

История
Версия Изменения
v22.15.0

API объявлен стабильным.

v19.1.0, v18.13.0

Добавлено в версиях: v19.1.0, v18.13.0

Реализация класса MIMEType.

В соответствии с соглашениями браузеров все свойства объектов MIMEType реализованы как геттеры и сеттеры в прототипе класса, а не как свойства данных непосредственно в объекте.

Строка MIME — это структурированная строка, содержащая несколько значимых компонентов. При разборе возвращается объект MIMEType, содержащий свойства для каждого из этих компонентов.

Конструктор: new MIMEType(input)

  • input <string> Входные данные MIME для разбора

Создает новый объект MIMEType, разбирая input.

Модули JavaScript
import { MIMEType } from 'node:util';

const myMIME = new MIMEType('text/plain');
CommonJS
const { MIMEType } = require('node:util');

const myMIME = new MIMEType('text/plain');

Будет выброшено исключение TypeError, если input не является допустимым MIME. Обратите внимание, что будет предпринята попытка преобразовать переданные значения в строки. Например:

Модули JavaScript
import { MIMEType } from 'node:util';
const myMIME = new MIMEType({ toString: () => 'text/plain' });
console.log(String(myMIME));
// Prints: text/plain
CommonJS
const { MIMEType } = require('node:util');
const myMIME = new MIMEType({ toString: () => 'text/plain' });
console.log(String(myMIME));
// Prints: text/plain

mime.type

  • Тип: <string>

Получает и задает часть MIME, содержащую тип.

Модули JavaScript
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
CommonJS
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

  • Тип: <string>

Получает и задает часть MIME, содержащую подтип.

Модули JavaScript
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
CommonJS
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

  • Тип: <string>

Получает основу MIME. Это свойство доступно только для чтения. Для изменения MIME используйте mime.type или mime.subtype.

Модули JavaScript
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
CommonJS
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

  • Тип: <MIMEParams>

Получает объект MIMEParams, представляющий параметры MIME. Это свойство доступно только для чтения. Подробности см. в документации MIMEParams.

mime.toString()

  • Возвращает: <string>

Метод toString() объекта MIMEType возвращает сериализованное представление MIME.

Для соответствия стандартам этот метод не позволяет пользователям настраивать процесс сериализации MIME.

mime.toJSON()

  • Возвращает: <string>

Псевдоним для mime.toString().

Этот метод вызывается автоматически, когда объект MIMEType сериализуется с помощью JSON.stringify().

Модули JavaScript
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"]
CommonJS
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

API MIMEParams предоставляет доступ на чтение и запись к параметрам MIMEType.

Конструктор: new MIMEParams()

Создает новый объект MIMEParams с пустыми параметрами

Модули JavaScript
import { MIMEParams } from 'node:util';

const myParams = new MIMEParams();
CommonJS
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 <string>
  • Возвращает: <string> | <null> Строку или null, если пары «имя-значение» с указанным name нет.

Возвращает значение первой пары «имя-значение», имя которой — name. Если таких пар нет, возвращается null.

mimeParams.has(name)

  • name <string>
  • Возвращает: <boolean>

Возвращает true, если существует хотя бы одна пара «имя-значение», имя которой — name.

mimeParams.keys()

  • Возвращает: <Iterator>

Возвращает итератор по именам всех пар «имя-значение».

Модули JavaScript
import { MIMEType } from 'node:util';

const { params } = new MIMEType('text/plain;foo=0;bar=1');
for (const name of params.keys()) {
  console.log(name);
}
// Prints:
//   foo
//   bar
CommonJS
const { MIMEType } = require('node:util');

const { params } = new MIMEType('text/plain;foo=0;bar=1');
for (const name of params.keys()) {
  console.log(name);
}
// Prints:
//   foo
//   bar

mimeParams.set(name, value)

  • name <string>
  • value <string>

Устанавливает в объекте MIMEParams значение value для name. Если уже существуют пары «имя-значение» с именем name, значение первой такой пары устанавливается в value.

Модули JavaScript
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());
// Prints: foo=def;bar=1;baz=xyz
CommonJS
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());
// Prints: foo=def;bar=1;baz=xyz

mimeParams.values()

  • Возвращает: <Iterator>

Возвращает итератор по значениям всех пар «имя-значение».

mimeParams[Symbol.iterator]()

  • Возвращает: <Iterator>

Псевдоним для mimeParams.entries().

Модули JavaScript
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);
}
// Prints:
//   foo bar
//   xyz baz
CommonJS
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);
}
// Prints:
//   foo bar
//   xyz baz

util.parseArgs([config])

История
Версия Изменения
v22.4.0

Добавлена поддержка разрешения отрицательных параметров в аргументах config.

v20.0.0

API больше не является экспериментальным.

v18.11.0, v16.19.0

Добавлена поддержка значений по умолчанию в аргументах config.

v18.7.0, v16.17.0

Добавлена поддержка получения подробной информации о разборе с помощью tokens в аргументах config и возвращаемых свойствах.

v18.3.0, v16.17.0

Добавлено в: v18.3.0, v16.17.0

  • config <Object> Используется для передачи аргументов для разбора и настройки анализатора. config поддерживает следующие свойства:

    • args <string[]> массив строк аргументов. По умолчанию: process.argv с удаленными execPath и filename.
    • 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> Следует ли выбрасывать ошибку при обнаружении неизвестных аргументов или при передаче аргументов, не соответствующих type, настроенному в options. По умолчанию: true.
    • allowPositionals <boolean> Принимает ли эта команда позиционные аргументы. По умолчанию: false, если strict — true, иначе true.
    • allowNegative <boolean> Если true, позволяет явно устанавливать для логических параметров значение false, добавляя префикс --no- к имени параметра. По умолчанию: false.
    • tokens <boolean> Возвращать ли разобранные токены. Это полезно для расширения встроенного поведения: от добавления дополнительных проверок до повторной обработки токенов различными способами. По умолчанию: false.
  • Возвращает: <Object> Разобранные аргументы командной строки:

    • values <Object> Сопоставление разобранных имен параметров с их значениями типа <string> или <boolean>.
    • positionals <string[]> Позиционные аргументы.
    • tokens <Object[]> | <undefined> См. раздел токены parseArgs. Возвращается только в том случае, если config включает tokens: true.

Предоставляет более высокоуровневый API для разбора аргументов командной строки, чем непосредственное взаимодействие с process.argv. Принимает спецификацию ожидаемых аргументов и возвращает структурированный объект с разобранными параметрами и позиционными аргументами.

Модули JavaScript
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);
// Prints: [Object: null prototype] { foo: true, bar: 'b' } []
CommonJS
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);
// Prints: [Object: null prototype] { foo: true, bar: 'b' } []

parseArgs tokens

Подробная информация о разборе доступна для добавления пользовательского поведения; для этого укажите tokens: true в конфигурации. Возвращаемые токены имеют свойства, описывающие:

  • все токены
    • kind <string> Одно из значений 'option', 'positional' или 'option-terminator'.
    • index <number> Индекс элемента в args, содержащего токен. Таким образом, исходный аргумент для токена — это args[token.index].
  • токены параметров
    • name <string> Длинное имя параметра.
    • rawName <string> Способ использования параметра в аргументах, например -f для --foo.
    • value <string> | <undefined> Значение параметра, заданное в аргументах. Для логических параметров не определено.
    • inlineValue <boolean> | <undefined> Указывает, задано ли значение параметра непосредственно, например --foo=bar.
  • позиционные токены
    • value <string> Значение позиционного аргумента в аргументах (то есть args[index]).
  • токен завершения параметров

Возвращаемые токены расположены в том же порядке, в котором они встречаются во входных аргументах. Для параметров, встречающихся в аргументах несколько раз, создается токен для каждого использования. Группы коротких параметров, например -xy, преобразуются в отдельный токен для каждого параметра. Таким образом, -xxx создает три токена.

Например, чтобы добавить поддержку параметра с отрицанием, такого как --no-color (поддерживаемого allowNegative, если параметр имеет тип boolean), возвращаемые токены можно обработать повторно, чтобы изменить сохраненное значение параметра с отрицанием.

Модули JavaScript
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 });

// Reprocess the option tokens and overwrite the returned values.
tokens
  .filter((token) => token.kind === 'option')
  .forEach((token) => {
    if (token.name.startsWith('no-')) {
      // Store foo:false for --no-foo
      const positiveName = token.name.slice(3);
      values[positiveName] = false;
      delete values[token.name];
    } else {
      // Resave value so last one wins if both --foo and --no-foo.
      values[token.name] = token.value ?? true;
    }
  });

const color = values.color;
const logfile = values.logfile ?? 'default.log';

console.log({ logfile, color });
CommonJS
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 });

// Reprocess the option tokens and overwrite the returned values.
tokens
  .filter((token) => token.kind === 'option')
  .forEach((token) => {
    if (token.name.startsWith('no-')) {
      // Store foo:false for --no-foo
      const positiveName = token.name.slice(3);
      values[positiveName] = false;
      delete values[token.name];
    } else {
      // Resave value so last one wins if both --foo and --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 } copy

util.parseEnv(content)

Добавлено в: v21.7.0, v20.12.0
Стабильность: 1.1 — Активная разработка
  • content <string>

Исходное содержимое файла .env.

  • Возвращает: <Object>

Пример файла .env:

CommonJS
const { parseEnv } = require('node:util');

parseEnv('HELLO=world\nHELLO=oh my\n');
// Returns: { HELLO: 'oh my' }
Модули JavaScript
import { parseEnv } from 'node:util';

parseEnv('HELLO=world\nHELLO=oh my\n');
// Returns: { HELLO: 'oh my' }

util.promisify(original)

История
Версия Изменения
v20.8.0

Вызов promisify для функции, возвращающей Promise, объявлен устаревшим.

v8.0.0

Добавлено в: v8.0.0

  • original <Function>
  • Возвращает: <Function>

Принимает функцию, использующую стандартный стиль обратного вызова с ошибкой в первом аргументе, то есть принимающую обратный вызов (err, value) => ... в качестве последнего аргумента, и возвращает версию, возвращающую промисы.

Модули JavaScript
import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);
promisifiedStat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});
CommonJS
const { promisify } = require('node:util');
const { stat } = require('node:fs');

const promisifiedStat = promisify(stat);
promisifiedStat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

Или, что эквивалентно, используя async functions:

Модули JavaScript
import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);

async function callStat() {
  const stats = await promisifiedStat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat();
CommonJS
const { promisify } = require('node:util');
const { stat } = require('node:fs');

const promisifiedStat = promisify(stat);

async function callStat() {
  const stats = await promisifiedStat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat();

Если присутствует свойство original[util.promisify.custom], promisify вернёт его значение; см. раздел Пользовательские функции с поддержкой промисов.

promisify() предполагает, что original во всех случаях является функцией, принимающей обратный вызов в качестве последнего аргумента. Если original не является функцией, promisify() выбросит ошибку. Если original является функцией, но её последний аргумент не является обратным вызовом с ошибкой в первом аргументе, ей всё равно будет передан такой обратный вызов в качестве последнего аргумента.

Использование promisify() для методов класса или других методов, использующих this, может привести к неожиданным результатам, если не обработать это особым образом:

Модули JavaScript
import { promisify } from 'node:util';

class Foo {
  constructor() {
    this.a = 42;
  }

  bar(callback) {
    callback(null, this.a);
  }
}

const foo = new Foo();

const naiveBar = promisify(foo.bar);
// TypeError: Cannot read properties of undefined (reading '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'
CommonJS
const { promisify } = require('node:util');

class Foo {
  constructor() {
    this.a = 42;
  }

  bar(callback) {
    callback(null, this.a);
  }
}

const foo = new Foo();

const naiveBar = promisify(foo.bar);
// TypeError: Cannot read properties of undefined (reading '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():

Модули JavaScript
import { promisify } from 'node:util';

function doSomething(foo, callback) {
  // ...
}

doSomething[promisify.custom] = (foo) => {
  return getPromiseSomehow();
};

const promisified = promisify(doSomething);
console.log(promisified === doSomething[promisify.custom]);
// prints 'true'
CommonJS
const { promisify } = require('node:util');

function doSomething(foo, callback) {
  // ...
}

doSomething[promisify.custom] = (foo) => {
  return getPromiseSomehow();
};

const promisified = promisify(doSomething);
console.log(promisified === doSomething[promisify.custom]);
// prints 'true'

Это может быть полезно, если исходная функция не соответствует стандартному формату, в котором обратный вызов с ошибкой в первом аргументе передаётся в качестве последнего аргумента.

Например, для функции, принимающей (foo, onSuccessCallback, onErrorCallback):

doSomething[util.promisify.custom] = (foo) => {
  return new Promise((resolve, reject) => {
    doSomething(foo, resolve, reject);
  });
}; copy

Если 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);
  });
}; copy

util.stripVTControlCharacters(str)

Добавлено в: v16.11.0
  • str <string>
  • Возвращает: <string>

Возвращает str без ANSI-кодов экранирования.

console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'));
// Prints "value" copy

util.styleText(format, text[, options])

История
Версия Изменения
v22.17.0

Добавлен формат 'none', не выполняющий преобразований.

v22.13.0

Функция styleText получила статус стабильной.

v22.8.0, v20.18.0

Учитываются isTTY и такие переменные среды, как NO_COLOR, 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>
    • validateStream <boolean> Если значение равно true, проверяется, может ли stream обрабатывать цвета. По умолчанию: true.
    • stream <Stream> Поток, который будет проверен на поддержку цветов. По умолчанию: process.stdout.

Эта функция возвращает отформатированный текст с учётом переданных format для вывода в терминал. Она учитывает возможности терминала и работает в соответствии с настройками, заданными переменными среды NO_COLOR, NODE_DISABLE_COLORS и FORCE_COLOR.

Модули JavaScript
import { styleText } from 'node:util';
import { stderr } from 'node:process';

const successMessage = styleText('green', 'Success!');
console.log(successMessage);

const errorMessage = styleText(
  'red',
  'Error! Error!',
  // Validate if process.stderr has TTY
  { stream: stderr },
);
console.error(errorMessage);
CommonJS
const { styleText } = require('node:util');
const { stderr } = require('node:process');

const successMessage = styleText('green', 'Success!');
console.log(successMessage);

const errorMessage = styleText(
  'red',
  'Error! Error!',
  // Validate if process.stderr has TTY
  { stream: stderr },
);
console.error(errorMessage);

util.inspect.colors также предоставляет такие форматы текста, как italic и underline, которые можно сочетать:

console.log(
  util.styleText(['underline', 'italic'], 'My italic underlined message'),
); copy

При передаче массива форматов они применяются слева направо, поэтому следующий стиль может переопределить предыдущий.

console.log(
  util.styleText(['red', 'green'], 'text'), // green
); copy

Специальное значение формата none не добавляет к тексту никакого дополнительного форматирования.

Полный список форматов приведён в разделе модификаторы.

Класс: util.TextDecoder

История
Версия Изменения
v11.0.0

Теперь класс доступен в глобальном объекте.

v8.3.0

Добавлено в: v8.3.0

Реализация API стандарта кодирования WHATWG TextDecoder.

const decoder = new TextDecoder();
const u8arr = new Uint8Array([72, 101, 108, 108, 111]);
console.log(decoder.decode(u8arr)); // Hello copy

Поддерживаемые кодировки WHATWG

Согласно стандарту кодирования WHATWG, кодировки, поддерживаемые API TextDecoder, перечислены в таблицах ниже. Для каждой кодировки можно использовать один или несколько псевдонимов.

Различные конфигурации сборки 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'

Кодировка 'iso-8859-16', указанная в стандарте кодирования WHATWG, не поддерживается.

new TextDecoder([encoding[, options]])

  • encoding <string> Определяет кодировку encoding, поддерживаемую этим экземпляром TextDecoder. По умолчанию: 'utf-8'.
  • options <Object>
    • fatal <boolean> true, если ошибки декодирования должны считаться фатальными. Этот параметр не поддерживается, если ICU отключён (см. раздел Интернационализация). По умолчанию: false.
    • ignoreBOM <boolean> Если true, TextDecoder будет включать метку порядка байтов в результат декодирования. Если false, метка порядка байтов будет удалена из выходных данных. Этот параметр используется только в том случае, если encoding имеет значение 'utf-8', 'utf-16be' или 'utf-16le'. По умолчанию: false.

Создаёт новый экземпляр 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

  • Тип: <string>

Кодировка, поддерживаемая экземпляром TextDecoder.

textDecoder.fatal

  • Тип: <boolean>

Значение будет true, если ошибки декодирования приводят к выбрасыванию TypeError.

textDecoder.ignoreBOM

  • Тип: <boolean>

Значение будет true, если результат декодирования будет включать метку порядка байтов.

Класс: util.TextEncoder

История
Версия Изменения
v11.0.0

Теперь класс доступен в глобальном объекте.

v8.3.0

Добавлено в: v8.3.0

Реализация API TextEncoder стандарта WHATWG Encoding. Все экземпляры TextEncoder поддерживают только кодировку UTF-8.

const encoder = new TextEncoder();
const uint8array = encoder.encode('this is some data'); copy

Класс TextEncoder также доступен в глобальном объекте.

textEncoder.encode([input])

  • input <string> Текст для кодирования. По умолчанию: пустая строка.
  • Возвращает: <Uint8Array>

Кодирует строку input в UTF-8 и возвращает Uint8Array с закодированными байтами.

textEncoder.encodeInto(src, dest)

Добавлено в: v12.11.0
  • src <string> Текст для кодирования.
  • dest <Uint8Array> Массив для хранения результата кодирования.
  • Возвращает: <Object>
    • read <number> Количество прочитанных кодовых единиц Unicode из src.
    • written <number> Количество записанных байтов UTF-8 в dest.

Кодирует строку src в UTF-8 и записывает результат в Uint8Array dest, а затем возвращает объект, содержащий количество прочитанных кодовых единиц Unicode и записанных байтов UTF-8.

const encoder = new TextEncoder();
const src = 'this is some data';
const dest = new Uint8Array(10);
const { read, written } = encoder.encodeInto(src, dest); copy

textEncoder.encoding

  • Тип: <string>

Кодировка, поддерживаемая экземпляром TextEncoder. Всегда имеет значение 'utf-8'.

util.toUSVString(string)

Добавлено в: v16.8.0, v14.18.0
  • string <string>

Возвращает string, заменяя все суррогатные кодовые точки (или, что эквивалентно, все непарные суррогатные кодовые единицы) символом замены Unicode U+FFFD.

util.transferableAbortController()

История
Версия Изменения
v22.15.0

API присвоен статус стабильного.

v18.11.0

Добавлено в: v18.11.0

Создает и возвращает экземпляр <AbortController>, чей <AbortSignal> помечен как передаваемый и может использоваться с structuredClone() или postMessage().

util.transferableAbortSignal(signal)

История
Версия Изменения
v22.15.0

API присвоен статус стабильного.

v18.11.0

Добавлено в: v18.11.0

  • signal <AbortSignal>
  • Возвращает: <AbortSignal>

Помечает указанный <AbortSignal> как передаваемый, чтобы его можно было использовать с structuredClone() и postMessage().

const signal = transferableAbortSignal(AbortSignal.timeout(100));
const channel = new MessageChannel();
channel.port2.postMessage(signal, [signal]); copy

util.aborted(signal, resource)

История
Версия Изменения
v22.16.0

Статус стабильности этой функции изменен с экспериментального на стабильный.

v19.7.0, v18.16.0

Добавлено в: v19.7.0, v18.16.0

  • signal <AbortSignal>
  • resource <Object> Любой объект, отличный от null, связанный с прерываемой операцией и слабо удерживаемый в памяти. Если resource будет удален сборщиком мусора до того, как произойдет прерывание signal, промис останется ожидающим, что позволит Node.js прекратить его отслеживание. Это помогает предотвращать утечки памяти при длительных или не подлежащих отмене операциях.
  • Возвращает: <Promise>

Ожидает событие abort для указанного signal и возвращает промис, который разрешается при прерывании signal. Если указан resource, объект, связанный с операцией, удерживается по слабой ссылке, поэтому, если resource будет удален сборщиком мусора до того, как произойдет прерывание signal, возвращенный промис останется ожидающим. Это предотвращает утечки памяти при длительных или не подлежащих отмене операциях.

CommonJS
const { aborted } = require('node:util');

// Obtain an object with an abortable signal, like a custom resource or operation.
const dependent = obtainSomethingAbortable();

// Pass `dependent` as the resource, indicating the promise should only resolve
// if `dependent` is still in memory when the signal is aborted.
aborted(dependent.signal, dependent).then(() => {

  // This code runs when `dependent` is aborted.
  console.log('Dependent resource was aborted.');
});

// Simulate an event that triggers the abort.
dependent.on('event', () => {
  dependent.abort(); // This will cause the `aborted` promise to resolve.
});
Модули JavaScript
import { aborted } from 'node:util';

// Obtain an object with an abortable signal, like a custom resource or operation.
const dependent = obtainSomethingAbortable();

// Pass `dependent` as the resource, indicating the promise should only resolve
// if `dependent` is still in memory when the signal is aborted.
aborted(dependent.signal, dependent).then(() => {

  // This code runs when `dependent` is aborted.
  console.log('Dependent resource was aborted.');
});

// Simulate an event that triggers the abort.
dependent.on('event', () => {
  dependent.abort(); // This will cause the `aborted` promise to resolve.
});

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
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <ArrayBuffer> или <SharedArrayBuffer>.

См. также util.types.isArrayBuffer() и util.types.isSharedArrayBuffer().

util.types.isAnyArrayBuffer(new ArrayBuffer());  // Returns true
util.types.isAnyArrayBuffer(new SharedArrayBuffer());  // Returns true copy

util.types.isArrayBufferView(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром одного из представлений <ArrayBuffer>, например типизированным массивом или <DataView>. Эквивалентно 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 copy

util.types.isArgumentsObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом arguments.

function foo() {
  util.types.isArgumentsObject(arguments);  // Returns true
} copy

util.types.isArrayBuffer(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <ArrayBuffer>. Сюда не входят экземпляры <SharedArrayBuffer>. Обычно желательно проверять оба типа; для этого см. util.types.isAnyArrayBuffer().

util.types.isArrayBuffer(new ArrayBuffer());  // Returns true
util.types.isArrayBuffer(new SharedArrayBuffer());  // Returns false copy

util.types.isAsyncFunction(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является асинхронной функцией. Здесь сообщается только то, что видит движок JavaScript; в частности, возвращаемое значение может не соответствовать исходному коду, если использовался инструмент транспиляции.

util.types.isAsyncFunction(function foo() {});  // Returns false
util.types.isAsyncFunction(async function foo() {});  // Returns true copy

util.types.isBigInt64Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром BigInt64Array.

util.types.isBigInt64Array(new BigInt64Array());   // Returns true
util.types.isBigInt64Array(new BigUint64Array());  // Returns false copy

util.types.isBigIntObject(value)

Добавлено в: v10.4.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом BigInt, например созданным с помощью Object(BigInt(123)).

util.types.isBigIntObject(Object(BigInt(123)));   // Returns true
util.types.isBigIntObject(BigInt(123));   // Returns false
util.types.isBigIntObject(123);  // Returns false copy

util.types.isBigUint64Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром BigUint64Array.

util.types.isBigUint64Array(new BigInt64Array());   // Returns false
util.types.isBigUint64Array(new BigUint64Array());  // Returns true copy

util.types.isBooleanObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является логическим объектом, например созданным с помощью new Boolean().

util.types.isBooleanObject(false);  // Returns false
util.types.isBooleanObject(true);   // Returns false
util.types.isBooleanObject(new Boolean(false)); // Returns true
util.types.isBooleanObject(new Boolean(true));  // Returns true
util.types.isBooleanObject(Boolean(false)); // Returns false
util.types.isBooleanObject(Boolean(true));  // Returns false copy

util.types.isBoxedPrimitive(value)

Добавлено в: v10.11.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является любым объектом-обёрткой примитива, например созданным с помощью new Boolean(), new String() или Object(Symbol()).

Например:

util.types.isBoxedPrimitive(false); // Returns false
util.types.isBoxedPrimitive(new Boolean(false)); // Returns true
util.types.isBoxedPrimitive(Symbol('foo')); // Returns false
util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true
util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true copy

util.types.isCryptoKey(value)

Добавлено в: v16.2.0
  • value <Object>
  • Возвращает: <boolean>

Возвращает true, если value является <CryptoKey>, и false в противном случае.

util.types.isDataView(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <DataView>.

const ab = new ArrayBuffer(20);
util.types.isDataView(new DataView(ab));  // Returns true
util.types.isDataView(new Float64Array());  // Returns false copy

См. также ArrayBuffer.isView().

util.types.isDate(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Date>.

util.types.isDate(new Date());  // Returns true copy

util.types.isExternal(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является нативным значением External.

Нативное значение 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)
... copy
Модули JavaScript
import native from 'napi_addon.node';
import { types } from 'node:util';

const data = native.myNapi();
types.isExternal(data); // returns true
types.isExternal(0); // returns false
types.isExternal(new String('foo')); // returns false
CommonJS
const native = require('napi_addon.node');
const { types } = require('node:util');

const data = native.myNapi();
types.isExternal(data); // returns true
types.isExternal(0); // returns false
types.isExternal(new String('foo')); // returns false

Дополнительные сведения о napi_create_external см. в разделе napi_create_external().

util.types.isFloat16Array(value)

Добавлено в: v22.16.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Float16Array>.

util.types.isFloat16Array(new ArrayBuffer());  // Returns false
util.types.isFloat16Array(new Float16Array());  // Returns true
util.types.isFloat16Array(new Float32Array());  // Returns false copy

util.types.isFloat32Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Float32Array>.

util.types.isFloat32Array(new ArrayBuffer());  // Returns false
util.types.isFloat32Array(new Float32Array());  // Returns true
util.types.isFloat32Array(new Float64Array());  // Returns false copy

util.types.isFloat64Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Float64Array>.

util.types.isFloat64Array(new ArrayBuffer());  // Returns false
util.types.isFloat64Array(new Uint8Array());  // Returns false
util.types.isFloat64Array(new Float64Array());  // Returns true copy

util.types.isGeneratorFunction(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является функцией-генератором. Здесь сообщается только то, что видит движок JavaScript; в частности, возвращаемое значение может не соответствовать исходному коду, если использовался инструмент транспиляции.

util.types.isGeneratorFunction(function foo() {});  // Returns false
util.types.isGeneratorFunction(function* foo() {});  // Returns true copy

util.types.isGeneratorObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом-генератором, возвращённым встроенной функцией-генератором. Эта функция сообщает только то, что видит движок JavaScript; в частности, возвращаемое значение может не совпадать с исходным исходным кодом, если использовался инструмент транспиляции.

function* foo() {}
const generator = foo();
util.types.isGeneratorObject(generator);  // Returns true copy

util.types.isInt8Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Int8Array>.

util.types.isInt8Array(new ArrayBuffer());  // Returns false
util.types.isInt8Array(new Int8Array());  // Returns true
util.types.isInt8Array(new Float64Array());  // Returns false copy

util.types.isInt16Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Int16Array>.

util.types.isInt16Array(new ArrayBuffer());  // Returns false
util.types.isInt16Array(new Int16Array());  // Returns true
util.types.isInt16Array(new Float64Array());  // Returns false copy

util.types.isInt32Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Int32Array>.

util.types.isInt32Array(new ArrayBuffer());  // Returns false
util.types.isInt32Array(new Int32Array());  // Returns true
util.types.isInt32Array(new Float64Array());  // Returns false copy

util.types.isKeyObject(value)

Добавлено в: v16.2.0
  • value <Object>
  • Возвращает: <boolean>

Возвращает true, если value является <KeyObject>, и false в противном случае.

util.types.isMap(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Map>.

util.types.isMap(new Map());  // Returns true copy

util.types.isMapIterator(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является итератором, возвращённым для экземпляра встроенного <Map>.

const map = new Map();
util.types.isMapIterator(map.keys());  // Returns true
util.types.isMapIterator(map.values());  // Returns true
util.types.isMapIterator(map.entries());  // Returns true
util.types.isMapIterator(map[Symbol.iterator]());  // Returns true copy

util.types.isModuleNamespaceObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром объекта пространства имён модуля.

import * as ns from './a.js';

util.types.isModuleNamespaceObject(ns);  // Returns true copy

util.types.isNativeError(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение было возвращено конструктором встроенного типа Error.

console.log(util.types.isNativeError(new Error()));  // true
console.log(util.types.isNativeError(new TypeError()));  // true
console.log(util.types.isNativeError(new RangeError()));  // true copy

Подклассы встроенных типов ошибок также являются встроенными ошибками:

class MyError extends Error {}
console.log(util.types.isNativeError(new MyError()));  // true copy

То, что значение instanceof является экземпляром встроенного класса ошибок, не равнозначно isNativeError() возвращению true для этого значения. isNativeError() возвращает true для ошибок из другой области выполнения, тогда как instanceof Error возвращает false для этих ошибок:

Модули JavaScript
import { createContext, runInContext } from 'node:vm';
import { types } from 'node:util';

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(types.isNativeError(myError)); // true
console.log(myError instanceof Error); // false
CommonJS
const { createContext, runInContext } = require('node:vm');
const { types } = require('node:util');

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(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 copy

util.types.isNumberObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом числа, например созданным с помощью new Number().

util.types.isNumberObject(0);  // Returns false
util.types.isNumberObject(new Number(0));   // Returns true copy

util.types.isPromise(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным <Promise>.

util.types.isPromise(Promise.resolve(42));  // Returns true copy

util.types.isProxy(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром <Proxy>.

const target = {};
const proxy = new Proxy(target, {});
util.types.isProxy(target);  // Returns false
util.types.isProxy(proxy);  // Returns true copy

util.types.isRegExp(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом регулярного выражения.

util.types.isRegExp(/abc/);  // Returns true
util.types.isRegExp(new RegExp('abc'));  // Returns true copy

util.types.isSet(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Set>.

util.types.isSet(new Set());  // Returns true copy

util.types.isSetIterator(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является итератором, возвращённым для экземпляра встроенного <Set>.

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 copy

util.types.isSharedArrayBuffer(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <SharedArrayBuffer>. Сюда не входят экземпляры <ArrayBuffer>. Обычно рекомендуется проверять оба типа; для этого см. util.types.isAnyArrayBuffer().

util.types.isSharedArrayBuffer(new ArrayBuffer());  // Returns false
util.types.isSharedArrayBuffer(new SharedArrayBuffer());  // Returns true copy

util.types.isStringObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом строки, например созданным с помощью new String().

util.types.isStringObject('foo');  // Returns false
util.types.isStringObject(new String('foo'));   // Returns true copy

util.types.isSymbolObject(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является объектом символа, созданным вызовом Object() для примитива Symbol.

const symbol = Symbol('foo');
util.types.isSymbolObject(symbol);  // Returns false
util.types.isSymbolObject(Object(symbol));   // Returns true copy

util.types.isTypedArray(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <TypedArray>.

util.types.isTypedArray(new ArrayBuffer());  // Returns false
util.types.isTypedArray(new Uint8Array());  // Returns true
util.types.isTypedArray(new Float64Array());  // Returns true copy

См. также ArrayBuffer.isView().

util.types.isUint8Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является экземпляром встроенного <Uint8Array>.

util.types.isUint8Array(new ArrayBuffer());  // Returns false
util.types.isUint8Array(new Uint8Array());  // Returns true
util.types.isUint8Array(new Float64Array());  // Returns false copy

util.types.isUint8ClampedArray(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным экземпляром <Uint8ClampedArray>.

util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
util.types.isUint8ClampedArray(new Float64Array());  // Returns false copy

util.types.isUint16Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным экземпляром <Uint16Array>.

util.types.isUint16Array(new ArrayBuffer());  // Returns false
util.types.isUint16Array(new Uint16Array());  // Returns true
util.types.isUint16Array(new Float64Array());  // Returns false copy

util.types.isUint32Array(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным экземпляром <Uint32Array>.

util.types.isUint32Array(new ArrayBuffer());  // Returns false
util.types.isUint32Array(new Uint32Array());  // Returns true
util.types.isUint32Array(new Float64Array());  // Returns false copy

util.types.isWeakMap(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным экземпляром <WeakMap>.

util.types.isWeakMap(new WeakMap());  // Returns true copy

util.types.isWeakSet(value)

Добавлено в: v10.0.0
  • value <any>
  • Возвращает: <boolean>

Возвращает true, если значение является встроенным экземпляром <WeakSet>.

util.types.isWeakSet(new WeakSet());  // Returns true copy

Устаревшие API

Следующие API устарели и больше не должны использоваться. Существующие приложения и модули следует обновить, чтобы найти альтернативные решения.

util._extend(target, source)

Добавлено в: v0.7.5Устарело с: v6.0.0
Стабильность: 0 — Устарело: вместо этого используйте Object.assign().
  • target <Object>
  • source <Object>

Метод util._extend() никогда не предназначался для использования вне внутренних модулей Node.js. Тем не менее сообщество обнаружило его и стало использовать.

Он устарел и не должен использоваться в новом коде. В JavaScript есть очень похожие встроенные возможности — Object.assign().

util.isArray(object)

Добавлено в: v0.6.0Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте Array.isArray().
  • object <any>
  • Возвращает: <boolean>

Псевдоним для Array.isArray().

Возвращает true, если заданное значение object является Array. В противном случае возвращает false.

const util = require('node:util');

util.isArray([]);
// Returns: true
util.isArray(new Array());
// Returns: true
util.isArray({});
// Returns: false copy

util.isBoolean(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте typeof value === 'boolean'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Boolean. В противном случае возвращает false.

const util = require('node:util');

util.isBoolean(1);
// Returns: false
util.isBoolean(0);
// Returns: false
util.isBoolean(false);
// Returns: true copy

util.isBuffer(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте Buffer.isBuffer().
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Buffer. В противном случае возвращает false.

const util = require('node:util');

util.isBuffer({ length: 0 });
// Returns: false
util.isBuffer([]);
// Returns: false
util.isBuffer(Buffer.from('hello world'));
// Returns: true copy

util.isDate(object)

Добавлено в: v0.6.0Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте util.types.isDate().
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Date. В противном случае возвращает false.

const util = require('node:util');

util.isDate(new Date());
// Returns: true
util.isDate(Date());
// false (without 'new' returns a String)
util.isDate({});
// Returns: false copy

util.isError(object)

Добавлено в: v0.6.0Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте util.types.isNativeError().
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является <Error>. В противном случае возвращает false.

const util = require('node:util');

util.isError(new Error());
// Returns: true
util.isError(new TypeError());
// Returns: true
util.isError({ name: 'Error', message: 'an error occurred' });
// Returns: false copy

Этот метод зависит от поведения Object.prototype.toString(). Если аргумент object изменяет @@toStringTag, результат может оказаться неверным.

const util = require('node:util');
const obj = { name: 'Error', message: 'an error occurred' };

util.isError(obj);
// Returns: false
obj[Symbol.toStringTag] = 'Error';
util.isError(obj);
// Returns: true copy

util.isFunction(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте typeof value === 'function'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Function. В противном случае возвращает false.

const util = require('node:util');

function Foo() {}
const Bar = () => {};

util.isFunction({});
// Returns: false
util.isFunction(Foo);
// Returns: true
util.isFunction(Bar);
// Returns: true copy

util.isNull(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте value === null.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object строго равно null. В противном случае возвращает false.

const util = require('node:util');

util.isNull(0);
// Returns: false
util.isNull(undefined);
// Returns: false
util.isNull(null);
// Returns: true copy

util.isNullOrUndefined(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте value === undefined || value === null.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object равно null или undefined. В противном случае возвращает false.

const util = require('node:util');

util.isNullOrUndefined(0);
// Returns: false
util.isNullOrUndefined(undefined);
// Returns: true
util.isNullOrUndefined(null);
// Returns: true copy

util.isNumber(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте typeof value === 'number'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Number. В противном случае возвращает false.

const util = require('node:util');

util.isNumber(false);
// Returns: false
util.isNumber(Infinity);
// Returns: true
util.isNumber(0);
// Returns: true
util.isNumber(NaN);
// Returns: true copy

util.isObject(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте value !== null && typeof value === 'object'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object строго является Object и не является Function (хотя в JavaScript функции являются объектами). В противном случае возвращает false.

const util = require('node:util');

util.isObject(5);
// Returns: false
util.isObject(null);
// Returns: false
util.isObject({});
// Returns: true
util.isObject(() => {});
// Returns: false copy

util.isPrimitive(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте (typeof value !== 'object' && typeof value !== 'function') || value === null.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object имеет примитивный тип. В противном случае возвращает false.

const util = require('node:util');

util.isPrimitive(5);
// Returns: true
util.isPrimitive('foo');
// Returns: true
util.isPrimitive(false);
// Returns: true
util.isPrimitive(null);
// Returns: true
util.isPrimitive(undefined);
// Returns: true
util.isPrimitive({});
// Returns: false
util.isPrimitive(() => {});
// Returns: false
util.isPrimitive(/^$/);
// Returns: false
util.isPrimitive(new Date());
// Returns: false copy

util.isRegExp(object)

Добавлено в: v0.6.0Устарело с: v4.0.0
Стабильность: 0 — Устарело
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является RegExp. В противном случае возвращает false.

const util = require('node:util');

util.isRegExp(/some regexp/);
// Returns: true
util.isRegExp(new RegExp('another regexp'));
// Returns: true
util.isRegExp({});
// Returns: false copy

util.isString(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте typeof value === 'string'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является string. В противном случае возвращает false.

const util = require('node:util');

util.isString('');
// Returns: true
util.isString('foo');
// Returns: true
util.isString(String('foo'));
// Returns: true
util.isString(5);
// Returns: false copy

util.isSymbol(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте typeof value === 'symbol'.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object является Symbol. В противном случае возвращает false.

const util = require('node:util');

util.isSymbol(5);
// Returns: false
util.isSymbol('foo');
// Returns: false
util.isSymbol(Symbol('foo'));
// Returns: true copy

util.isUndefined(object)

Добавлено в: v0.11.5Устарело с: v4.0.0
Стабильность: 0 — Устарело: вместо этого используйте value === undefined.
  • object <any>
  • Возвращает: <boolean>

Возвращает true, если заданное значение object равно undefined. В противном случае возвращает false.

const util = require('node:util');

const foo = undefined;
util.isUndefined(5);
// Returns: false
util.isUndefined(foo);
// Returns: true
util.isUndefined(null);
// Returns: false copy

util.log(string)

Добавлено в: v0.3.0Устарело начиная с: v6.0.0
Стабильность: 0 — Устарело: используйте сторонний модуль.
  • string <string>

Метод util.log() выводит переданную строку string в stdout с добавлением временной метки.

const util = require('node:util');

util.log('Timestamped message.'); copy

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v22.x/docs/api/util.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API