如何在 JavaScript 中检查变量是否为 blob

问题描述 投票:0回答:3

当 typeof 返回“object”..

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

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

javascript types blob
3个回答
131
投票

你可以像这样测试它是否是 Blob 的实例:

var MyBlob = new Blob(['test text'], {type : 'text/plain'});
document.body.innerHTML = MyBlob instanceof Blob;

这也适用于从 Blob 继承的事物。


8
投票

请注意,

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

NodeJS 中情况并非总是如此,因为它没有全局 Blob 实现(因此我们正在处理 polyfill)。

例如,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
});

0
投票

这个例子是一个真实的例子,我想获取一个文件并检查响应。

  const data = error.response.data;
    if (data instanceof Blob) { 
      const resp = JSON.parse(await data.text());
      if (resp && resp.error) {
        return resp.error;
      }
    }
© www.soinside.com 2019 - 2024. All rights reserved.