通过 hasOwnProperty 获取文件属性

Jan*_*old 5 html javascript drag-and-drop

我有一个 HTML5 文件上传对话/dropzone,它会给我这样的东西:

event.dataTransfer.files
Run Code Online (Sandbox Code Playgroud)

现在我看到为每个 File 对象设置了一些(强制性?)属性:

https://developer.mozilla.org/en-US/docs/Web/API/File

file.namefile.lastModifiedDate等等。我可以通过这种方式获取值

event.dataTransfer.files.item(0).name
Run Code Online (Sandbox Code Playgroud)

但不要以这种方式检查该属性是否确实存在:

event.dataTransfer.files.item(0).hasOwnProperty('name')
Run Code Online (Sandbox Code Playgroud)

我了解到检查属性是否存在是一个很好的做法,hasOwnProperty()但这不适合这里。为什么呢?是因为 file.name 在某种程度上是“强制性的”吗?但是为什么值只是存储在原型链的某个地方?

小智 1

我没有解释为什么 hasOwnProperty 不起作用,但我创建了以下函数,它可以接收 event.dataTransfer.files.item(0) 作为输入并返回具有所有可用属性的对象:

function extractFileMetadada(file) {
    var r = {};
    var a = ['lastModified','lastModifiedDate','name','size','type','fileName','fileSize','webkitRelativePath'];

    for (var i=0; i<a.length; i++) {
        if (typeof file[a[i]] !== 'undefined')
            r[a[i]] = file[a[i]];
    }

    return r;
}
Run Code Online (Sandbox Code Playgroud)