Javascript 检查变量是否保存文件或Blob
Javascript的文件表示既有Javascript 检查变量是否保存文件或Blob,javascript,fileapi,Javascript,Fileapi,Javascript的文件表示既有File又有Blob,两者几乎是一样的。有没有办法检查变量是否保存了文件或Blob类型的数据?W3.org: '文件对象是具有名称属性(即字符串)的Blob对象;' 如果是文件: var d = new Date(2013, 12, 5, 16, 23, 45, 600); var generatedFile = new File(["Rough Draft ...."], "Draft1.txt", {type: 'text/plain', lastModif
File
又有Blob
,两者几乎是一样的。有没有办法检查变量是否保存了文件或Blob
类型的数据?W3.org:
'文件对象是具有名称属性(即字符串)的Blob对象;'
如果是文件:
var d = new Date(2013, 12, 5, 16, 23, 45, 600);
var generatedFile = new File(["Rough Draft ...."], "Draft1.txt", {type: 'text/plain', lastModified: d});
console.log(typeof generatedFile.name == 'string'); // true
如果是水滴:
var blob = new Blob();
console.log(typeof blob.name); // undefined
条件:
var isFile = typeof FileOrBlob.name == 'string';
在尝试确定对象是否为文件时,这对我很有用:
var reader = new FileReader();
if(file.type){
reader.readAsDataURL(file);
}
如果我想检查它是否是像图像一样的特定文件类型,我会执行以下操作:
if(file.type && file.type.indexOf('image') !== -1){
reader.readAsDataURL(file);
}
比较构造函数类:
var b = new Blob()
console.log(b.constructor === Blob) // true
最简单的方法:
a = new File([1,2,3], "file.txt");
b = new Blob([1,2,3]);
c = "something else entirely";
a instanceof File
> true
b instanceof File
> false
c instanceof File
> false
根据Nick Brunt的:
function isFile(input) {
if ('File' in window && input instanceof File)
return true;
else return false;
}
function isBlob(input) {
if ('Blob' in window && input instanceof Blob)
return true;
else return false;
}
//Test
const a = new File([1,2,3], "foo.txt", {type: "text/plain"});
const b = new Blob([1,2,3]);
const c = "something else entirely";
console.log(isFile(a)); //true
console.log(isBlob(a)); //true
console.log(isFile(b)); //false
console.log(isBlob(b)); //true
console.log(isFile(c)); //false
console.log(isBlob(c)); //false
对于Opera mini和IE都不起作用。虽然对于IE来说,这并不重要,因为您可能只使用文件输入标记,在这种情况下,您肯定会知道它是一个文件。一行解决方案让生活更轻松
基于Ric天赋
if(x.name).
对于江湖郎中,if(x.constructor==File)
对于pedantics.or.comapare构造函数的名称x.constructor.name=='Blob'
如果可以是具有name属性的其他对象,我们可以对其他属性进行更详细的检查,这只是一个简单的例子。如果对象可以有大多数属性,但它仍然不是文件或Blob对象,我认为这是错误的方法,如果对象具有该属性,但该对象仍然可能不是Blob或File,它将返回true。为什么不这样测试呢isFile instanceof File
?
const isFile = input => 'File' in window && input instanceof File;
const isBlob = input => 'Blob' in window && input instanceof Blob;
const a = new File([1,2,3], "foo.txt", {type: "text/plain"});
...
console.log(isFile(a)) // true
...