我有一个HTML5文件上传对话框/ dropzone,它会给我这样的东西:
event.dataTransfer.files
现在我看到为每个File对象设置了一些(强制?)属性:
https://developer.mozilla.org/en-US/docs/Web/API/File
与file.name
,file.lastModifiedDate
等相似。我可以通过这种方式获得价值
event.dataTransfer.files.item(0).name
但不检查属性是否实际存在:
event.dataTransfer.files.item(0).hasOwnProperty('name')
我了解到使用hasOwnProperty()
检查存在的属性是一个好习惯,但这不适用于此。为什么会这样?是因为file.name是某种方式"强制性"?但为什么价值只是存储在原型链的某个地方?
答案 0 :(得分:0)
我没有解释为什么 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;
}