当 typeof 返回“object”..
var MyBlob = new Blob(['test text'], {type : 'text/plain'});
console.log(typeof MyBlob) // "object"
现在要求一个通用的解决方案来检查变量是否是 blob 是否还为时过早,因为它尚未得到广泛支持?或者我应该如何在已经实现的浏览器中测试 blob 类型?
你可以像这样测试它是否是 Blob 的实例:
var MyBlob = new Blob(['test text'], {type : 'text/plain'});
document.body.innerHTML = MyBlob instanceof Blob;
这也适用于从 Blob 继承的事物。
请注意,
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
});
这个例子是一个真实的例子,我想获取一个文件并检查响应。
const data = error.response.data;
if (data instanceof Blob) {
const resp = JSON.parse(await data.text());
if (resp && resp.error) {
return resp.error;
}
}