如何在 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 中的一个数组?