web-dev-qa-db-ja.com

JavaScriptで変数がblobかどうかを確認する方法

Typeofは「オブジェクト」を返します。

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

変数がまだ広くサポートされていないため、変数がblobであるかどうかを確認するための一般的なソリューションを求めるのは時期尚早ですか?または、すでに実装されているブラウザでblob型をテストするにはどうすればよいですか?

29
Jaak Kütt

次のようにBlobのインスタンスかどうかをテストできます。

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

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

これは、Blobから継承するものでも機能します。

56
jfriend00

instanceofには、オブジェクトの作成に使用した正確なコンストラクター関数を渡す必要があることに注意してください。

NodeJSではグローバルBlob実装がないため、これは常に当てはまるわけではありません(したがって、ポリフィルを扱っています)。

たとえば、node-fetchは内部Blob実装を使用しますが、テストスイート(Blobをポリフィルする)でjestを使用している場合、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
});
1
Matthematics