【问题标题】: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 类型?

【问题讨论】:

    标签: javascript types 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
    });
    

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 2011-08-18
      • 1970-01-01
      • 2011-04-08
      • 2021-11-23
      • 1970-01-01
      • 2012-01-15
      • 2010-09-10
      相关资源
      最近更新 更多