Spec-Zone.ru › Node.js

Util

Устойчивость: 2 - Стабильно

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

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

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

util.callbackify(original)

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

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

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

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

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

Выведет:

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 <строка> Строка, определяющая часть приложения, для которой создается функция debuglog
  • callback <Функция> Обратный вызов, вызываемый в первый раз при вызове функции ведения журнала с аргументом функции, являющимся более оптимизированной функцией ведения журнала.
  • Возвращает: <Функция> Функция ведения журнала

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

const util = require('node:util');
const debuglog = util.debuglog('foo');

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

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

FOO 3245: hello from foo [123] copy

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

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

const util = require('node:util');
const debuglog = util.debuglog('foo-bar');

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

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

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

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

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

const util = require('node:util');
let debuglog = util.debuglog('internals', (debug) => {
  // Replace with a logging function that optimizes out
  // testing if the section is enabled
  debuglog = debug;
}); copy

debuglog().enabled

Добавлен в: v14.9.0
  • <булево>

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

const util = require('node:util');
const enabled = util.debuglog('foo').enabled;
if (enabled) {
  console.log('hello from foo [%d]', 123);
} copy

Если эта программа запускается со значением 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 <Функция> Функция, которая устарела.
  • msg <строка> Сообщение предупреждения для отображения при вызове устаревшей функции.
  • code <строка> Код устаревания. См. список устаревших API для получения списка кодов.
  • Возвращает: <Функция> Устаревшая функция, обернутая для вывода предупреждения.

Метод util.deprecate() оборачивает fn (которая может быть функцией или классом) таким образом, что она помечена как устаревшая.

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

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

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

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

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

const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001');
const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001');
fn1(); // Emits a deprecation warning with code DEP0001
fn2(); // Does not emit a deprecation warning because it has the same code copy

Если используются флаги командной строки --no-deprecation или --no-warnings, или если свойство process.noDeprecation установлено в true до первого предупреждения об устаревании, метод util.deprecate() ничего не делает.

Если флаги командной строки --trace-deprecation или --trace-warnings установлены, или свойство process.traceDeprecation установлено в true, предупреждение и стек вывода выводится в stderr при первом вызове устаревшей функции.

Если установлен флаг командной строки --throw-deprecation или свойство process.throwDeprecation установлено в true, при вызове устаревшей функции будет выброшено исключение.

Флаги командной строки --throw-deprecation и свойство process.throwDeprecation имеют приоритет над флагами --trace-deprecation и process.traceDeprecation.

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

История
Версия Изменения
v12.11.0

Сейчас спецификатор %c игнорируется.

v12.0.0

Аргумент format теперь принимается только в том случае, если он фактически содержит спецификаторы формата.

v12.0.0

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

v11.4.0

Спецификаторы %d, %f, и %i теперь правильно поддерживают Символы.

v11.4.0

У спецификатора %o глубина depth снова имеет значение по умолчанию 4.

v11.0.0

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

v10.12.0

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

v8.4.0

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

v0.5.3

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

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

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

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

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

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 <Объект>
  • format <строка>

Эта функция идентична 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.getSystemErrorName(err)

Добавлена в: v9.7.0
  • err <число>
  • Возвращает: <строка>

Возвращает строковое имя для числового кода ошибки, который поступает из 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.inherits(constructor, superConstructor)

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

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

v0.3.0

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

Устойчивость: 3 - Legacy: Используйте синтаксис класса ES2015 и ключевое слово extends вместо этого.
  • constructor <Функция>
  • superConstructor <Функция>

Использование 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:

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'); copy

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

Теперь ArrayBuffers также отображают своё двоичное содержимое.

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

Метод util.inspect() возвращает строковое представление object , предназначенное для отладки. Вывод util.inspect может изменяться в любое время и не должен использоваться программно. Можно передать дополнительные options, которые изменят результат. util.inspect() будет использовать имя конструктора и/или @@toStringTag для создания идентифицирующего тега для инспектируемого значения.

class Foo {
  get [Symbol.toStringTag]() {
    return 'bar';
  }
}

class Bar {}

const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } });

util.inspect(new Foo()); // 'Foo [bar] {}'
util.inspect(new Bar()); // 'Bar {}'
util.inspect(baz);       // '[foo] {}' copy

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

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] }
// } copy

В следующем примере инспектируются все свойства объекта util:

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

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

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

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

const o = {
  a: [1, 2, [[
    'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
      'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
    'test',
    'foo']], 4],
  b: new Map([['za', 1], ['zb', 'test']]),
};
console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // 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(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }));

// {
//   a: [
//     1,
//     2,
//     [
//       [
//         'Lorem ipsum dolor sit amet,\n' +
//           'consectetur adipiscing elit, sed do eiusmod \n' +
//           'tempor incididunt ut labore et dolore magna aliqua.',
//         'test',
//         'foo'
//       ]
//     ],
//     4
//   ],
//   b: Map(2) {
//     'za' => 1,
//     'zb' => 'test'
//   }
// }

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

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

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

const obj = { a: 1 };
const obj2 = { b: 2 };
const weakSet = new WeakSet([obj, obj2]);

console.log(inspect(weakSet, { showHidden: true }));
// WeakSet { { a: 1 }, { b: 2 } } copy

Опция sorted гарантирует, что порядок вставки свойств объекта не повлияет на результат util.inspect().

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

const o1 = {
  b: [2, 3, 1],
  a: '`a` comes before `b`',
  c: new Set([2, 3, 1]),
};
console.log(inspect(o1, { sorted: true }));
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }));
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }

const o2 = {
  c: new Set([2, 1, 3]),
  a: '`a` comes before `b`',
  b: [2, 3, 1],
};
assert.strict.equal(
  inspect(o1, { sorted: true }),
  inspect(o2, { sorted: true }),
); copy

Опция numericSeparator добавляет подчёркивание каждые три цифры ко всем числам.

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

const thousand = 1_000;
const million = 1_000_000;
const bigNumber = 123_456_789n;
const bigDecimal = 1_234.123_45;

console.log(inspect(thousand, { numericSeparator: true }));
// 1_000
console.log(inspect(million, { numericSeparator: true }));
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }));
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }));
// 1_234.123_45 copy

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 — Сбрасывает все (цветные) модификаторы до значений по умолчанию
  • полужирный — Сделать текст полужирным
  • курсив — Сделать текст курсивом
  • подчёркнутый — Подчеркнуть текст
  • зачёркнутый — Проводит горизонтальную линию посередине текста (Псевдоним: strikeThrough, crossedout, crossedOut)
  • hidden — Выводит текст, но делает его невидимым (Псевдоним: скрыть)
  • приглушённый — Уменьшение интенсивности цвета (Псевдоним: faint)
  • перечёркнутый — Перечеркнуть текст сверху
  • мигание — Скрывает и отображает текст с интервалом
  • инверсия — Переключает цвета переднего и заднего плана (Псевдоним: swapcolors, swapColors)
  • двойное подчёркивание — Двойное подчёркивание текста (Псевдоним: doubleUnderline)
  • рамка — Отобразить рамку вокруг текста
Цвета переднего плана
  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white
  • gray (псевдоним: grey, blackBright)
  • redBright
  • greenBright
  • yellowBright
  • blueBright
  • magentaBright
  • cyanBright
  • whiteBright
Цвета фона
  • bgBlack
  • bgRed
  • bgGreen
  • bgYellow
  • bgBlue
  • bgMagenta
  • bgCyan
  • bgWhite
  • bgGray (псевдоним: bgGrey, bgBlackBright)
  • bgRedBright
  • bgGreenBright
  • bgYellowBright
  • bgBlueBright
  • bgMagentaBright
  • bgCyanBright
  • bgWhiteBright

Пользовательские функции проверки объектов

История
Версия Изменения
v17.3.0, v16.14.0

Для большей совместимости добавлен аргумент inspect.

v0.1.97

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

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

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

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

  [util.inspect.custom](depth, options, inspect) {
    if (depth < 0) {
      return options.stylize('[Box]', 'special');
    }

    const newOptions = Object.assign({}, options, {
      depth: options.depth === null ? null : options.depth - 1,
    });

    // 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);

util.inspect(box);
// Returns: "Box< true >" copy

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

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

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

util.inspect(obj);
// Returns: "{ bar: 'baz' }" copy

util.inspect.custom

История
Версия Изменения
v10.12.0

Теперь это определено как общий символ.

v6.6.0

Добавлен в: v6.6.0

  • <символ>, который может использоваться для объявления пользовательских функций проверки.

Помимо доступности через 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(). Также поддерживается непосредственная установка свойств параметров.

const util = require('node:util');
const arr = Array(101).fill(0);

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

util.isDeepStrictEqual(val1, val2)

Добавлен в: v9.0.0
  • val1 <любой>
  • val2 <любой>
  • Возвращает: <логическое>

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

См. assert.deepStrictEqual() для получения дополнительной информации о глубоком строгом равенстве.

Класс: util.MIMEType

Добавлен в: v19.1.0, v18.13.0
Устойчивость: 1 - Экспериментальный

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

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

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

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

  • input <строка> Входной MIME для разбора

Создаёт новый объект MIMEType путём разбора input.

MJS модули

import { MIMEType } from 'node:util';

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

CJS модули

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

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

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

MJS модули

import { MIMEType } from 'node:util';
const myMIME = new MIMEType({ toString: () => 'text/plain' });
console.log(String(myMIME));
// Prints: text/plain

CJS модули

const { MIMEType } = require('node:util');
const myMIME = new MIMEType({ toString: () => 'text/plain' });
console.log(String(myMIME));
// Prints: text/plain

mime.type

  • <строка>

Получает и устанавливает часть типа MIME.

MJS модули

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

CJS модули

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

const myMIME = new MIMEType('text/javascript');
console.log(myMIME.type);
// Prints: text
myMIME.type = 'application';
console.log(myMIME.type);
// Prints: application
console.log(String(myMIME));
// Prints: application/javascript

mime.subtype

  • <строка>

Получает и устанавливает часть подтипа MIME.

MJS модули

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

CJS модули

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

const myMIME = new MIMEType('text/ecmascript');
console.log(myMIME.subtype);
// Prints: ecmascript
myMIME.subtype = 'javascript';
console.log(myMIME.subtype);
// Prints: javascript
console.log(String(myMIME));
// Prints: text/javascript

mime.essence

  • <строка>

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

MJS модули

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

CJS модули

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()

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

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

Из-за необходимости соблюдения стандартов этот метод не позволяет пользователям настраивать процесс сериализации MIME.

mime.toJSON()

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

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

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

MJS модули

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"]

CJS модули

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 с пустыми параметрами.

MJS модули

import { MIMEParams } from 'node:util';

const myParams = new MIMEParams();

CJS модули

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

const myParams = new MIMEParams();

mimeParams.delete(name)

  • name <строка>

Удаляет все пары имя-значение, у которых имя равно name.

mimeParams.entries()

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

Возвращает итератор по каждой паре имя-значение в параметрах. Каждый элемент итератора — это массив JavaScript Array. Первый элемент массива — name, второй — value.

mimeParams.get(name)

  • name <строка>
  • Возвращает: <строка> | <null> Строку или null, если нет пары имя-значение с заданным name.

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

mimeParams.has(name)

  • name <строка>
  • Возвращает: <булево>

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

mimeParams.keys()

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

Возвращает итератор по именам каждой пары имя-значение.

MJS модули

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

CJS модули

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 <строка>
  • value <строка>

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

MJS модули

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

CJS модули

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()

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

Возвращает итератор по значениям каждой пары имя-значение.

mimeParams[@@iterator]()

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

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

MJS модули

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

CJS модули

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])

История
Версия Изменения
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 <Объект> Используется для предоставления аргументов для разбора и настройки анализатора. config поддерживает следующие свойства:

    • args <массив строк> массив строк аргументов. По умолчанию: process.argv с удаленными execPath и filename.
    • options <Объект> Используется для описания аргументов, известных анализатору. Ключи options — это длинные имена опций, а значения — <объект>, принимающий следующие свойства:
      • type <строка> Тип аргумента, который должен быть либо boolean , либо string.
      • multiple <логическое значение> Может ли эта опция быть указана несколько раз. Если true, все значения будут собраны в массив. Если false, значения для опции определяются по принципу «последнее значение имеет приоритет». По умолчанию: false.
      • short <строка> Короткое альтернативное имя опции.
      • default <строка> | <логическое значение> | <массив строк> | <массив логических значений> Значение опции по умолчанию, когда оно не задано в args. Оно должно быть того же типа, что и свойство type. Когда multiple равно true, оно должно быть массивом.
    • strict <логическое значение> Должно ли выбрасываться исключение при встрече неизвестных аргументов или при передаче аргументов, не соответствующих type , настроенному в options. По умолчанию: true.
    • allowPositionals <логическое значение> Принимает ли эта команда позиционные аргументы. По умолчанию: false , если strict равно true, в противном случае true.
    • tokens <логическое значение> Вернуть обработанные токены. Это полезно для расширения встроенного поведения, от добавления дополнительных проверок до повторной обработки токенов различными способами. По умолчанию: false.
  • Возвращает: <Объект> Обработанные аргументы командной строки:

    • values <Объект> Сопоставление обработанных имён опций со значениями <строка> или <логическое значение>.
    • positionals <массив строк> Позиционные аргументы.
    • tokens <массив объектов> | <неопределено> См. раздел токены parseArgs. Возвращается только если config включает tokens: true.

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

Модули MJS

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' } []

Модули CJS

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

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

Например, чтобы использовать возвращаемые токены для добавления поддержки отрицания опции, такой как --no-color, токены можно обработать повторно, чтобы изменить сохранённое значение для отрицаемой опции.

Модули MJS

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

Модули CJS

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)

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

Необработанное содержимое файла .env.

  • Возвращает: <Объект>

В качестве примера файла .env:

Модули CJS

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

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

Модули MJS

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 <Функция>
  • Возвращает: <Функция>

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

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

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

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

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

const stat = util.promisify(fs.stat);

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

callStat(); copy

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

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

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

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

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

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

const foo = new Foo();

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

Настраиваемые промисифицированные функции

Используя символ util.promisify.custom, можно переопределить возвращаемое значение util.promisify():

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

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

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

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

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

Например, с функцией, которая принимает (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

  • <символ>, который можно использовать для объявления настраиваемых промисифицированных вариантов функций, см. Настраиваемые промисифицированные функции.

Помимо доступности через 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 <строка>
  • Возвращает: <строка>

Возвращает str со всеми кодами ANSI-escape удалены.

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

util.styleText(format, text)

Устойчивость: 1.1 - Активное развитие
Добавлен в: v21.7.0, v20.12.0
  • format <строка> | <Массив> Формат текста или массив форматов текста, определенных в util.inspect.colors.
  • text <строка> Текст, который должен быть отформатирован.

Эта функция возвращает отформатированный текст, учитывая переданный format.

МОДУЛИ MJS

import { styleText } from 'node:util';
const errorMessage = styleText('red', 'Error! Error!');
console.log(errorMessage);

МОДУЛИ CJS

const { styleText } = require('node:util');
const errorMessage = styleText('red', 'Error! Error!');
console.log(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

Полный список форматов можно найти в модификаторах.

Класс: util.TextDecoder

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

Реализация спецификации WHATWG Encoding Standard TextDecoder API.

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

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

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

Разные конфигурации сборки Node.js поддерживают разные наборы кодировок. (см. Локализация)

Кодировки, поддерживаемые по умолчанию (с полными данными ICU)
Кодировка Псевдонимы
'ibm866' '866', 'cp866', 'csibm866'
'iso-8859-2' 'csisolatin2', 'iso-ir-101', 'iso8859-2', 'iso88592', 'iso_8859-2', 'iso_8859-2:1987', 'l2', 'latin2'
'iso-8859-3' 'csisolatin3', 'iso-ir-109', 'iso8859-3', 'iso88593', 'iso_8859-3', 'iso_8859-3:1988', 'l3', 'latin3'
'iso-8859-4' 'csisolatin4', 'iso-ir-110', 'iso8859-4', 'iso88594', 'iso_8859-4', 'iso_8859-4:1988', 'l4', 'latin4'
'iso-8859-5' 'csisolatincyrillic', 'cyrillic', 'iso-ir-144', 'iso8859-5', 'iso88595', 'iso_8859-5', 'iso_8859-5:1988'
'iso-8859-6' 'arabic', 'asmo-708', 'csiso88596e', 'csiso88596i', 'csisolatinarabic', 'ecma-114', 'iso-8859-6-e', 'iso-8859-6-i', 'iso-ir-127', 'iso8859-6', 'iso88596', 'iso_8859-6', 'iso_8859-6:1987'
'iso-8859-7' 'csisolatingreek', 'ecma-118', 'elot_928', 'greek', 'greek8', 'iso-ir-126', 'iso8859-7', 'iso88597', 'iso_8859-7', 'iso_8859-7:1987', 'sun_eu_greek'
'iso-8859-8' 'csiso88598e', 'csisolatinhebrew', 'hebrew', 'iso-8859-8-e', 'iso-ir-138', 'iso8859-8', 'iso88598', 'iso_8859-8', 'iso_8859-8:1988', 'visual'
'iso-8859-8-i' 'csiso88598i', 'logical'
'iso-8859-10' 'csisolatin6', 'iso-ir-157', 'iso8859-10', 'iso885910', 'l6', 'latin6'
'iso-8859-13' 'iso8859-13', 'iso885913'
'iso-8859-14' 'iso8859-14', 'iso885914'
'iso-8859-15' 'csisolatin9', 'iso8859-15', 'iso885915', 'iso_8859-15', 'l9'
'koi8-r' 'cskoi8r', 'koi', 'koi8', 'koi8_r'
'koi8-u' 'koi8-ru'
'macintosh' 'csmacintosh', 'mac', 'x-mac-roman'
'windows-874' 'dos-874', 'iso-8859-11', 'iso8859-11', 'iso885911', 'tis-620'
'windows-1250' 'cp1250', 'x-cp1250'
'windows-1251' 'cp1251', 'x-cp1251'
'windows-1252' 'ansi_x3.4-1968', 'ascii', 'cp1252', 'cp819', 'csisolatin1', 'ibm819', 'iso-8859-1', 'iso-ir-100', 'iso8859-1', 'iso88591', 'iso_8859-1', 'iso_8859-1:1987', 'l1', 'latin1', 'us-ascii', 'x-cp1252'
'windows-1253' 'cp1253', 'x-cp1253'
'windows-1254' 'cp1254', 'csisolatin5', 'iso-8859-9', 'iso-ir-148', 'iso8859-9', 'iso88599', 'iso_8859-9', 'iso_8859-9:1989', 'l5', 'latin5', 'x-cp1254'
'windows-1255' 'cp1255', 'x-cp1255'
'windows-1256' 'cp1256', 'x-cp1256'
'windows-1257' 'cp1257', 'x-cp1257'
'windows-1258' 'cp1258', 'x-cp1258'
'x-mac-cyrillic' 'x-mac-ukrainian'
'gbk' 'chinese', 'csgb2312', 'csiso58gb231280', 'gb2312', 'gb_2312', 'gb_2312-80', 'iso-ir-58', 'x-gbk'
'gb18030'
'big5' 'big5-hkscs', 'cn-big5', 'csbig5', 'x-x-big5'
'euc-jp' 'cseucpkdfmtjapanese', 'x-euc-jp'
'iso-2022-jp' 'csiso2022jp'
'shift_jis' 'csshiftjis', 'ms932', 'ms_kanji', 'shift-jis', 'sjis', 'windows-31j', 'x-sjis'
'euc-kr' 'cseuckr', 'csksc56011987', 'iso-ir-149', 'korean', 'ks_c_5601-1987', 'ks_c_5601-1989', 'ksc5601', 'ksc_5601', 'windows-949'
Кодировки, поддерживаемые при сборке Node.js с опцией small-icu
Кодировка Псевдонимы
'utf-8' 'unicode-1-1-utf-8', 'utf8'
'utf-16le' 'utf-16'
'utf-16be'
Кодировки, поддерживаемые при отключенном ICU
Кодировка Псевдонимы
'utf-8' 'unicode-1-1-utf-8', 'utf8'
'utf-16le' 'utf-16'

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

new TextDecoder([encoding[, options]])

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

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

v8.3.0

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

  • 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>

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

textEncoder.encodeInto(src, dest)

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

UTF-8 кодирует строку src в массив dest Uint8Array и возвращает объект, содержащий прочитанные символы Юникода и записанные байты 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 после замены всех суррогатных кодовых точек (или, что эквивалентно, всех непарных суррогатных кодовых единиц) на символ замены Юникода U+FFFD.

util.transferableAbortController()

Добавлен в: v18.11.0
Стабильность: 1 - Экспериментальная

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

util.transferableAbortSignal(signal)

Добавлен в: v18.11.0
Стабильность: 1 - Экспериментальная
  • 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)

Добавлен в: v19.7.0, v18.16.0
Стабильность: 1 - Экспериментальная
  • signal <AbortSignal>
  • resource <Object> Любой непустой объект, на который держится слабая ссылка.
  • Возвращает: <Promise>

Прослушивает событие прерывания для предоставленного signal и возвращает промис, который выполняется, когда signal прерывается. Если переданный resource собран сборщиком мусора до того, как signal прервётся, возвращённый промис останется в подвешенном состоянии неопределённо долго.

CJS модули

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

const dependent = obtainSomethingAbortable();

aborted(dependent.signal, dependent).then(() => {
  // Do something when dependent is aborted.
});

dependent.on('event', () => {
  dependent.abort();
});

MJS модули

import { aborted } from 'node:util';

const dependent = obtainSomethingAbortable();

aborted(dependent.signal, dependent).then(() => {
  // Do something when dependent is aborted.
});

dependent.on('event', () => {
  dependent.abort();
});

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 <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

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

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

util.types.isArrayBuffer(value)

Добавлен в: v10.0.0
  • value <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

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

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

util.types.isBigUint64Array(value)

Добавлен в: v10.0.0
  • value <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

Возвращает true, если значение является объектом типа boolean, например, созданным 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 <любое>
  • Возвращает: <логическое>

Возвращает 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 <Объект>
  • Возвращает: <логическое>

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

util.types.isDataView(value)

Добавлен в: v10.0.0
  • value <любое>
  • Возвращает: <логическое>

Возвращает 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 <любое>
  • Возвращает: <логическое>

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

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

util.types.isExternal(value)

Добавлен в: v10.0.0
  • value <любое>
  • Возвращает: <логическое>

Возвращает 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
const native = require('napi_addon.node');
const data = native.myNapi();
util.types.isExternal(data); // returns true
util.types.isExternal(0); // returns false
util.types.isExternal(new String('foo')); // returns false copy

Дополнительную информацию об napi_create_external, см. napi_create_external().

util.types.isFloat32Array(value)

Добавлен в: v10.0.0
  • value <любое>
  • Возвращает: <логическое>

Возвращает 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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isGeneratorObject(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isInt8Array(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v16.2.0
  • value <Объект>
  • Возвращает: <boolean>

Возвращает true если value является <Ключевой объект>, false в противном случае.

util.types.isMap(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isMapIterator(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

Возвращает true если значение является экземпляром модульного пространства имен.

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

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

util.types.isNativeError(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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

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

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

И наоборот, 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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isPromise(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isProxy(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <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)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isSet(value)

Added in: v10.0.0
  • value <любое>
  • Возвращает: <boolean>

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

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

util.types.isSetIterator(value)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <boolean>

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

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

util.types.isSymbolObject(value)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <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)

Added in: v10.0.0
  • value <любой>
  • Returns: <boolean>

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

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

util.types.isWeakSet(value)

Added in: v10.0.0
  • value <любой>
  • Returns: <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 <Объект>
  • source <Объект>

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

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

util.isArray(object)

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

Псевдоним для 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <булево>

Возвращает 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 <любой>
  • Возвращает: <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 <любой>
  • Возвращает: <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 <любой>
  • Возвращает: <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 <любой>
  • Возвращает: <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 <строка>

Метод 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/api/util.html

Spec-Zone.ru

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