Spec-Zone.ru › Node.js 16 LTS

Утилиты

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

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

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

const util = require('util');

util.callbackify(original)

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

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

const util = require('util');

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

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

Выведет:

hello world

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

Поскольку null имеет специальное значение в качестве первого аргумента обратного вызова, если обернутая функция отклоняет 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 && err.hasOwnProperty('reason') && err.reason === null;  // true
});

util.debuglog(section[, callback])

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

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

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

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

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

FOO 3245: hello from foo [123]

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

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

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

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

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

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

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

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

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

debuglog().enabled

Добавлена в: v14.9.0
  • <логическое значение>

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

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

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

hello from foo [123]

util.debug(section)

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

Псевдоним для util.debuglog. Использование позволяет повысить читаемость, не подразумевая запись при использовании только util.debuglog().enabled.

util.deprecate(fn, msg[, code])

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

Предупреждения о устаревании выводятся только один раз для каждого кода.

v0.8.0

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

  • fn <Функция> Функция, которая устаревает.
  • msg <строка> Сообщение предупреждения для отображения при вызове устаревшей функции.
  • code <строка> Код устаревания. См. список устаревших API для получения списка кодов.
  • Возвращает: <Функция> Обёрнутая устаревшая функция для вывода предупреждения.

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

const util = require('util');

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

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

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

const util = require('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

Если используются командные строки --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'

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

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

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

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

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

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

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

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.

util.getSystemErrorName(err)

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

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

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

util.getSystemErrorMap()

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

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

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

util.inherits(constructor, superConstructor)

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

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

v0.3.0

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

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

Использование util.inherits() не рекомендуется. Используйте ключевые слова ES6 class и extends, чтобы получить поддержку наследования на уровне языка. Также обратите внимание, что два стиля семантически несовместимы.

Передаёт прототипы методов от одного конструктора к другому. Прототип constructor будет установлен на новый объект, созданный из superConstructor.

В основном добавляет некоторую проверку входных данных поверх Object.setPrototypeOf(constructor.prototype, superConstructor.prototype). В качестве дополнительного удобства superConstructor будет доступен через свойство constructor.super_.

const util = require('util');
const EventEmitter = require('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!"

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

const EventEmitter = require('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]]])

История
Версия Изменения
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) не вызываются. По умолчанию: true.
    • showProxy <булево> Если true, проверка Proxy включает объекты target и handler. По умолчанию: false.
    • maxArrayLength <целое> Указывает максимальное количество Array, TypedArray, 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.
  • Возвращает: <строка> Представление object.

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

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

class Bar {}

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

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

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

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

const obj = {};
obj.a = [obj];
obj.b = {};
obj.b.inner = obj.b;
obj.b.obj = obj;

console.log(inspect(obj));
// <ref *1> {
//   a: [ [Circular *1] ],
//   b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }

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

const util = require('util');

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

Следующий пример демонстрирует влияние опции compact:

const util = require('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.

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

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

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

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

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

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

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

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

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

const util = require('util');

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

  [util.inspect.custom](depth, options) {
    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 = util.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 >"

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

const util = require('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' }"

util.inspect.custom

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

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

v6.6.0

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

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

Помимо доступности через util.inspect.custom, этот символ зарегистрирован глобально и может быть доступен в любой среде как Symbol.for('nodejs.util.inspect.custom').

const inspect = Symbol.for('nodejs.util.inspect.custom');

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

  toString() {
    return 'xxxxxxxx';
  }

  [inspect]() {
    return `Password <${this.toString()}>`;
  }
}

const password = new Password('r0sebud');
console.log(password);
// Prints Password <xxxxxxxx>

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

util.inspect.defaultOptions

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

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

const util = require('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

util.isDeepStrictEqual(val1, val2)

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

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

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

util.promisify(original)

Добавлен в: v8.0.0
  • original <Функция>
  • Возвращает: <Функция>

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

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

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

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

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

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

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

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

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

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

const util = require('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'

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

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

const util = require('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'

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

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

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

Если promisify.custom определено, но не является функцией, promisify() выведет ошибку.

util.promisify.custom

История
Версия Изменения
v13.12.0, v12.16.2

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

v8.0.0

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

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

Помимо доступности через util.promisify.custom, этот символ зарегистрирован глобально и может быть доступен в любой среде как Symbol.for('nodejs.util.promisify.custom').

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

const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom');

doSomething[kCustomPromisifiedSymbol] = (foo) => {
  return new Promise((resolve, reject) => {
    doSomething(foo, resolve, reject);
  });
};

util.stripVTControlCharacters(str)

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

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

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

Класс: util.TextDecoder

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

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

const decoder = new TextDecoder('shift_jis');
let string = '';
let buffer;
while (buffer = getNextChunkSomehow()) {
  string += decoder.decode(buffer, { stream: true });
}
string += decoder.decode(); // end-of-stream

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

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

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

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

Кодировка 'iso-8859-16', перечисленный в стандарте кодирования WHATWG, не поддерживается.

new TextDecoder([encoding[, options]])

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

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

v8.3.0

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

  • encoding <строка> Определяет encoding, которые поддерживает этот экземпляр TextDecoder. По умолчанию: 'utf-8'.
  • options <Объект>
    • fatal <булево> true если ошибки декодирования фатальны. Эта опция не поддерживается при отключенном ICU (см. Локализация). По умолчанию: false.
    • ignoreBOM <булево> Если 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

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

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

Класс 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);

textEncoder.encoding

  • <string>

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

util.toUSVString(string)

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

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

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('util').types или require('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

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

util.types.isArgumentsObject(value)

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

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

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

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

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

util.types.isBigInt64Array(value)

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

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

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

util.types.isBigUint64Array(value)

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

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

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

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

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

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

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

util.types.isDate(value)

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

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

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

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

Дополнительная информация о 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

util.types.isFloat64Array(value)

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

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

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

util.types.isGeneratorFunction(value)

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

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

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

util.types.isGeneratorObject(value)

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

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

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

util.types.isInt8Array(value)

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

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

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

util.types.isInt16Array(value)

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

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

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

util.types.isInt32Array(value)

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

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

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

util.types.isKeyObject(value)

Added in: v16.2.0
  • value <Объект>
  • Returns: <boolean>

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

util.types.isMap(value)

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

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

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

util.types.isMapIterator(value)

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

util.types.isModuleNamespaceObject(value)

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

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

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

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

util.types.isNativeError(value)

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

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

util.types.isNativeError(new Error());  // Returns true
util.types.isNativeError(new TypeError());  // Returns true
util.types.isNativeError(new RangeError());  // Returns true

util.types.isNumberObject(value)

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

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

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

util.types.isPromise(value)

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

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

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

util.types.isProxy(value)

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

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

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

util.types.isRegExp(value)

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

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

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

util.types.isSet(value)

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

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

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

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

util.types.isSharedArrayBuffer(value)

Added in: 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

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

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

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

См. также 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

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

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

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

util.types.isWeakMap(value)

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

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

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

util.types.isWeakSet(value)

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

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

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

util.types.isWebAssemblyCompiledModule(value)

Добавлен в: v10.0.0Устарел с версии: v14.0.0
Уровень стабильности: 0 - Устарел: Используйте value instanceof WebAssembly.Module вместо этого.
  • value <any>
  • Возвращает: <boolean>

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

const module = new WebAssembly.Module(wasmBuffer);
util.types.isWebAssemblyCompiledModule(module);  // Returns true

Устаревшие 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('util');

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

util.isBoolean(object)

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

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

const util = require('util');

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

util.isBuffer(object)

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

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

const util = require('util');

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

util.isDate(object)

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

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

const util = require('util');

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

util.isError(object)

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

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

const util = require('util');

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

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

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

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

util.isFunction(object)

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

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

const util = require('util');

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

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

util.isNull(object)

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

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

const util = require('util');

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

util.isNullOrUndefined(object)

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

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

const util = require('util');

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

util.isNumber(object)

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

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

const util = require('util');

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

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('util');

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

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('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
END_OF_DOCUMENT_MARKER

util.isRegExp(object)

Добавлен в: v0.6.0Устарел начиная с: v4.0.0
Устойчивость: 0 - Устарел
  • object <любой>
  • Возвращает: <булево>

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

const util = require('util');

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

util.isString(object)

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

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

const util = require('util');

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

util.isSymbol(object)

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

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

const util = require('util');

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

util.isUndefined(object)

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

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

const util = require('util');

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

util.log(string)

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

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

const util = require('util');

util.log('Timestamped message.');

© 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-v16.x/docs/api/util.html

Spec-Zone.ru

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