Подтвердить что ты не робот

Как проверить, является ли переменная блобом в JavaScript

Как typeof возвращает "объект".

var MyBlob = new Blob(['test text'], {type : 'text/plain'});
console.log(typeof MyBlob) // "object"

слишком рано просить об общем решении для проверки того, является ли переменная блобом, поскольку она еще не получила широкого распространения? Или как мне нужно тестировать тип blob в браузерах, которые уже реализованы?

4b9b3361

Ответ 1

Вы можете проверить, является ли это экземпляром Blob следующим образом:

var MyBlob = new Blob(['test text'], {type : 'text/plain'});
console.log(MyBlob instanceof Blob) // true

jsFiddle: http://jsfiddle.net/jfriend00/5xkgd/

Это будет работать для вещей, которые также наследуются от Blob.

Ответ 2

Обратите внимание, что instanceof необходимо передать точную функцию конструктора, используемую для создания объекта!

Это не всегда так в NodeJS, поскольку у него нет глобальной реализации Blob (поэтому мы имеем дело с полифиллами).

Например, node-fetch использует внутреннюю реализацию Blob, но если вы используете jest в наборе тестов (который заполняет Blob), вы заметите, что expect(myBlob).toBeInstanceOf(Blob); сгенерирует исключение, похожее на:

expect(value).toBeInstanceOf(constructor)

Expected constructor: Blob
Received constructor: Blob

В таких случаях лучшее, что мы можем сделать, это:

const fetch = require('node-fetch');
fetch(/* some request */).then(res => {
  const myBlob = await res.blob(); // a Blob created by node-fetch
  console.log(myBlob.constructor.name === 'Blob'); // true
});