如何检查变量是否是JavaScript中的blob

Jaa*_*ütt 27 javascript types blob

当typeof返回"对象"..

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

现在要求一个通用的解决方案来检查变量是否是一个blob还为时尚早,因为它尚未被广泛支持?或者我应该如何在已经实现它的浏览器中测试blob类型?

jfr*_*d00 59

您可以测试它是否是Blob的实例,如下所示:

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

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

这也适用于从Blob继承的东西.


Mat*_*ics 5

请注意,instanceof需要传递用于创建对象的确切构造函数!

这在 NodeJS 中并不总是如此,因为它没有全局 Blob 实现(所以我们正在处理 polyfills)。

例如,node-fetch使用内部 Blob 实现,但如果您在测试套件(它填充 Blob)中使用jest,您会注意到它expect(myBlob).toBeInstanceOf(Blob);会抛出类似于以下内容的异常:

expect(value).toBeInstanceOf(constructor)

Expected constructor: Blob
Received constructor: Blob
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们能做的最好的事情是:

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
});
Run Code Online (Sandbox Code Playgroud)