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

Posted

技术标签:

【中文标题】如何在 JavaScript 中检查变量是不是为 blob【英文标题】:How to check if a variable is a blob in JavaScript如何在 JavaScript 中检查变量是否为 blob 【发布时间】:2014-01-10 17:45:33 【问题描述】:

由于 typeof 返回“对象”..

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

正如@jfriend00 所说,这也适用于从 Blob 继承的东西。由于 File 继承自 Blob,如果 MyBlob 实际上是 File 的一个实例,则上面的计算结果也为 true。【参考方案2】:

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

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

例如,node-fetch 使用内部 Blob 实现,但如果您在测试套件(其中 polyfill 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
);

【讨论】:

以上是关于如何在 JavaScript 中检查变量是不是为 blob的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 JavaScript 中是不是存在变量?

如何检查 JavaScript 中是不是存在变量?

如何检查变量是不是是javascript中的类型化数组?

如何检查一个变量是不是是 JavaScript 中的一个数组?

Javascript:检查变量是不是为假或根本不存在[重复]

如何在 javascript 中检查此布尔哈希图是不是为空? [复制]