Как проверить, является ли переменная блобом в JavaScript
Как typeof возвращает "объект".
var MyBlob = new Blob(['test text'], {type : 'text/plain'});
console.log(typeof MyBlob) // "object"
слишком рано просить об общем решении для проверки того, является ли переменная блобом, поскольку она еще не получила широкого распространения? Или как мне нужно тестировать тип blob в браузерах, которые уже реализованы?
Ответы
Ответ 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
});