web-dev-qa-db-fra.com

Comment vérifier si une variable est un blob en JavaScript

Comme typeof renvoie "objet" ..

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

est-il trop tôt pour demander une solution générique pour vérifier si une variable est un blob car elle n'est pas encore largement supportée? Ou comment dois-je procéder pour tester le type de blob dans les navigateurs qui l'ont déjà implémenté?

29
Jaak Kütt

Vous pouvez tester s'il s'agit d'une instance de Blob comme ceci:

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

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

Cela fonctionnera également pour les éléments hérités de Blob.

56
jfriend00

Notez que instanceof doit recevoir la fonction constructeur exacte utilisée pour créer l'objet!

Ce n'est pas toujours le cas dans NodeJS, car il n'a pas d'implémentation Blob globale (nous avons donc affaire à des polyfills).

Par exemple, node-fetch utilise une implémentation Blob interne, mais si vous utilisez jest dans une suite de tests (qui remplit Blob), vous remarquerez que expect(myBlob).toBeInstanceOf(Blob); lèvera une exception similaire à:

expect(value).toBeInstanceOf(constructor)

Expected constructor: Blob
Received constructor: Blob

Dans de tels cas, le mieux que nous puissions faire est:

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