检查变量是否包含 File 或 Blob
Check if variable holds File or Blob
Javascript 有 File
和 Blob
两种文件表示方式,两者几乎是一回事。有没有办法检查一个变量是否持有 File
或 Blob
类型的数据?
W3.org:
'A File object is a Blob object with a name attribute, which is a string;'
如果是文件:
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
如果是 Blob:
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);
}
比较构造函数class:
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 Flair
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
...
Javascript 有 File
和 Blob
两种文件表示方式,两者几乎是一回事。有没有办法检查一个变量是否持有 File
或 Blob
类型的数据?
W3.org:
'A File object is a Blob object with a name attribute, which is a string;'
如果是文件:
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
如果是 Blob:
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);
}
比较构造函数class:
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 Flair
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
...