【问题标题】:How can I tell if a Javascript object is a File?如何判断 Javascript 对象是否是文件?
【发布时间】:2019-03-03 18:20:33
【问题描述】:

我有一个函数可以操作一个对象,该对象包含一个文件类型的“上传”成员。我想检测这个事实,以便我可以忽略它并跳过这种类型的所有对象。

我在控制台中尝试了很多东西,但似乎没有任何东西返回“true”。这是我在控制台断点内的徒劳尝试的记录:

> values.avatar
{upload: File}
> values.avatar.upload
File {name: "29_Drawing Hands by Escher.jpg", lastModified: 1446580115000, lastModifiedDate: Tue Nov 03 2015 14:48:35 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 1314300, …}
> values.avatar.upload.isPrototypeOf(File)
false
> File
ƒ File() { [native code] }
> File.prototype
File {constructor: ƒ, …}
values.avatar.upload.isPrototypeOf(File.prototype)
false
> values.avatar.upload.prototype 
undefined
> File.isPrototypeOf
ƒ isPrototypeOf() { [native code] }
> File
ƒ File() { [native code] }
> values.avatar
{upload: File}
> File
ƒ File() { [native code] }
> File.__proto__
ƒ Blob() { [native code] }
> values.avatar.upload.__proto__
File {constructor: ƒ, …}
values.avatar.upload.isPrototypeOf(File.__proto__)
false
> values.avatar.upload.isPrototypeOf(Blob.__proto__)
false

显然,我对原生类型和原型如何在 Javascript 中工作缺乏基本的了解。

【问题讨论】:

  • 试试values.avatar.upload instanceof File

标签: javascript file prototype


【解决方案1】:

您可以使用instanceof关键字查看。

if (values.avatar.upload instanceof File)
  // yes, it's a File type.
else
  // no, it's not.

【讨论】:

    【解决方案2】:

    检查

    values.avatar.upload instanceof File 
    

    【讨论】:

      【解决方案3】:

      你也可以通过它的原型进行测试:

      if(values.avatar.upload.prototype === File.prototype) {
        // true
      } else {
       // false
      }
      

      例如,您可以使用:

      File.prototype.isPrototypeOf(values.avatar.upload)
      

      例如。以下将返回 true:

      var file = new File([""], 'text.txt');
      console.log(File.prototype.isPrototypeOf(file));

      【讨论】:

      • 实例没有prototype 属性。这是完全错误的。
      • 我看不到 OP 有实例。
      • 第二个 sn-p 在功能上不等同于第一个 sn-p,但更规范的答案是 values.avatar.upload instanceof File
      • 第二个是例如你评论的。
      • ...but the more canonical answer is - 我试图坚持使用 OP。
      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多